以下是Google developer guide web page的.proto文件。假设协议缓冲区编译器在.proto文件上运行以生成数据访问类。这些类是否验证收到的消息?例如,它是否验证"类型" field的值是MOBILE,HOME还是WORK,没有别的?假设一条消息包含.proto文件中未指定的数据,这些类是否会提醒使用此应用程序?
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}
答案 0 :(得分:0)
是的,您收到的数据会被反序列化为您拥有的对象,并忽略任何未知字段。当您的应用程序收到其使用的原型中不存在的字段时,我认为没有任何警告,但这应该很容易测试。
来自docs:
您可以在不中断的情况下为邮件格式添加新字段 向后兼容性;旧的二进制文件只是忽略了新的字段 解析。因此,如果您有使用协议的通信协议 缓冲区作为其数据格式,您可以无需扩展协议 不得不担心破坏现有代码。