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以节省空间。
🏷️
标签
➡️