protobuf 版本之间的数据格式兼容性

Posted

技术标签:

【中文标题】protobuf 版本之间的数据格式兼容性【英文标题】:Data format compatibility between protobuf versions 【发布时间】:2011-07-07 01:38:25 【问题描述】:

我想知道协议缓冲区的序列化数据格式是否在 protobuf 编译器和客户端库版本之间保持不变。

换句话说,我是否需要使用相同的编译器版本来生成我的 Python、Java 和 C++ 类?这些客户端是否都需要使用相同版本的 protobuf 库?

This post 解决了我的问题,但其接受的答案特定于 OP 的 protobuf 版本。

【问题讨论】:

【参考方案1】:

是的,差不多就是这个想法。您使用哪个库并不重要,只要它遵循规范即可。请注意,相同的数据可以以稍微不同的方式表示,例如字段顺序对客户端来说并不重要,而客户端以升序写入字段是常见 order,明确要求客户端以任何顺序处理字段。我在这里要说的是,它可能不是完全相同的字节以相同的顺序,但它应该可以在任何客户端上正常工作。

请注意,某些实现可能会提供附加功能(*cough* 像我的一样提供继承支持),主要仅用于该单个客户端。在这种情况下,我会 a:期望这些功能在使用时是显而易见的,并且 b:它应该总是仍然产生有效的 protobuf 流(您可能只是选择忽略这些字段,或者支持它们作为bytes 用于往返)。

【讨论】:

如果它不是“完全相同的字节以相同的顺序”,许多客户端将中断。任何依赖散列和加密签名的人。

以上是关于protobuf 版本之间的数据格式兼容性的主要内容,如果未能解决你的问题,请参考以下文章

C#中使用ProtoBuf提高序列化速度对比二进制序列化

protobuf简介

《Go-micro微服务框架入门教程》学习笔记 | Protobuf

类似于xml的一种数据传输格式protobuf

google protobuf 数据类型_理解Protobuf数据格式解析

php 使用 protobuf