Protobuf 编码&避坑指南

💡 原文中文,约5200字,阅读约需13分钟。
📝

内容提要

Protocol Buffers(protobuf)是Google开发的一种高效、跨语言支持、清晰的数据序列化协议,具有向后兼容性。它使用二进制格式,需要额外的编译步骤。编码原理介绍了message的结构、tag的编码规则以及protobuf定义的6种类型,包括Varints和ZigZag编码。最佳实践包括注意字段编号范围、保留字段、不修改字段tag编号和类型,不使用required关键字,尽量使用小整数和sint类型。

🎯

关键要点

  • Protocol Buffers(protobuf)是Google开发的数据序列化协议,具有高效、跨语言支持和向后兼容性。
  • protobuf的优点包括高效率、跨语言支持、清晰的结构定义和向后兼容性。
  • protobuf的缺点包括不直观、缺乏某些数据类型和需要额外的编译步骤。
  • protobuf的编码原理包括message结构、tag编码规则和六种数据类型。
  • tag包含字段序号和类型信息,protobuf序列化不带字段名,修改字段名是安全的,但不能修改字段类型。
  • protobuf定义了Varints和ZigZag编码来优化数字类型的存储。
  • 最佳实践包括注意字段编号范围、保留字段、不修改字段tag编号和类型、避免使用required关键字,以及尽量使用小整数。
  • 保留字段可以防止协议不一致,使用reserved标记被删除的字段。
  • protobuf 3不再支持required修饰符,以确保兼容性。
  • 对于负数数据,建议使用sint32或sint64以节省空间。
➡️

继续阅读