开发学院,分享开发教程和最新动态
章节列表 什么是ProtobufProtobuf3 定义数据类型Protobuf3 标量值类型Protobuf3 缺省值Protobuf3 枚举Protobuf3 使用其他消息类型Protobuf3 嵌套类型Protobuf3 更新消息类型Protobuf3 未知字段Protobuf3 Any类型Protobuf3 OneofProtobuf3 MapsProtobuf3 包Protobuf3 定义服务Protobuf3 JSON映射Protobuf3 可选项Protobuf3 生成属于自己的类Protobuf 风格指南Protobuf 编码(1)Protobuf 编码(2)Protobuf 编码(3)Protobuf 技术Protocol Buffer C++实例教程: 为什么使用Protocol Buffer?Protocol Buffer C++实例教程: 定义协议格式Protocol Buffer C++实例教程: 编译Protocol BufferProtocol Buffer C++实例教程: Protocol Buffer APIProtocol Buffer C++实例教程: 发送消息Protocol Buffer C++实例教程: 读取消息Protocol Buffer C++实例教程: 扩展Protocol BufferProtocol Buffer C++实例教程: 优化技巧和高级用法Protocol Buffer C#实例教程: 前言Protocol Buffer C#实例教程:定义协议格式Protocol Buffer C#实例教程:编译Protocol Buffer Protocol Buffer C#实例教程:解析和序列化Protocol Buffer Go实例教程:前言Protocol Buffer Go实例教程:定义协议格式Protocol Buffer Go实例教程:编译Protocol BufferProtocol Buffer Go实例教程:读写消息Protocol Buffer JAVA实例教程:前言Protocol Buffer JAVA实例教程:定义协议格式Protocol Buffer JAVA实例教程:编译Protocol BufferProtocol Buffer JAVA实例教程:Protocol Buffer APIProtocol Buffer JAVA实例教程:写消息Protocol Buffer JAVA实例教程:读消息Protocol Buffer JAVA实例教程:扩展Protocol BufferProtocol Buffer Python实例教程:前言Protocol Buffer Python实例教程:定义消息格式Protocol Buffer Python实例教程:编译Protocol BufferProtocol Buffer Python实例教程:Protocol Buffer APIProtocol Buffer Python实例教程:写消息Protocol Buffer Python实例教程:读取MessageProtocol Buffer Python实例教程:扩展Protocol Buffer

Protocol Buffer Python实例教程:扩展Protocol Buffer

  在您发布使用Protocol Buffer的代码后,您迟早会毫无疑问地想要“改进”Protocol Buffer的定义。如果你想让你的新Protocol Buffer向后兼容,让你的Protocol Buffer向前兼容,那么你需要遵守一些规则。在新版本的Protocol Buffer中:

  •   您不能更改任何现有字段的标签号。

  •   您不得添加或删除任何必填字段。

  •   您可以删除可选或重复的字段。

  •   您可以添加新的可选或重复字段,但必须使用新的标签号(即,从未在此协Protocol Buffer中使用过的标签号,甚至未被删除的字段使用过)。

  (这些规则有一些例外,但很少使用。)

  如果您遵循这些规则,旧代码将愉快地阅读新消息,并简单地忽略任何新字段。对于旧代码,被删除的可选字段将只具有它们的默认值,被删除的重复字段将为空。新代码也会透明地读取旧消息。但是,请记住,新的可选字段不会出现在旧消息中,因此您需要显式检查它们是否设置了has_,或者在中提供一个合理的默认值。标签号后的[default = value]的原型文件。如果没有为可选元素指定默认值,则使用特定于类型的默认值:对于字符串,默认值为空字符串。对于布尔值,默认值为false。对于数值类型,默认值为零。还要注意,如果您添加了一个新的重复字段,您的新代码将无法判断它是空的(由新代码)还是根本没有设置(由旧代码),因为它没有has_flag。

高级用法

  Protocol buffer的使用超越了简单的访问器和序列化。请务必浏览Python应用编程接口参考,看看您还可以用它们做些什么。

  Protocol buffer类提供的一个关键特性是反射。您可以迭代消息的字段和摆布它们的值,而无需针对任何特定的消息类型编写代码。使用反射的一个非常有用的方法是将协议消息转换成其他编码,如XML或JSON。反射的一个更高级的用途可能是发现相同类型的两个消息之间的差异,或者开发一种“协议消息的正则表达式”,在这种表达式中,您可以编写与某些消息内容匹配的表达式。如果你运用你的想象力,就有可能将Protocol Buffers应用到比你最初预期的更广泛的问题上!

  反射是作为消息接口的一部分提供的。

  除非另有说明,本页面的内容是根据知识共享属性3.0许可证许可的,代码示例是根据Apache 2.0许可证许可的。有关详细信息,请参见我们的网站策略。Java是甲骨文和/或其附属公司的注册商标。