下面是来自Google developer guide web page的.proto文件。假设协议缓冲区编译器在.proto文件上运行以生成数据访问类。这些类是否验证接收到的消息?例如,它是否验证"type“字段的值为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;
}发布于 2017-11-02 01:19:28
是的,你收到的数据被反序列化到你拥有的对象中,任何未知的字段都会被忽略。我不认为当您的应用程序接收到它使用的protos中不存在的字段时会有任何警告,但这应该很容易测试。
从docs
您可以在不破坏向后兼容性的情况下向消息格式添加新字段;旧的二进制文件在解析时只是忽略新字段。因此,如果您有一个使用protocol buffers作为其数据格式的通信协议,则可以扩展您的协议,而不必担心破坏现有代码。
https://stackoverflow.com/questions/47042313
复制相似问题