协议缓冲区序列化输出是否完全确定?
Is protocol buffer serialization output fully deterministic?
给定协议缓冲区模式和一些数据,协议缓冲区序列化是否跨库和语言具有确定性?
基本上,无论使用何种库,我能保证相同的数据总是以相同的方式(精确到字节)序列化吗?
一般来说,相同的数据会以完全相同的方式序列化。
但是,protobuf 规范不保证这一点。例如,以下编码差异是允许的,并且必须在所有符合标准的库中解码为相同的结果:
- 编码字段的顺序与标签编号顺序不同。
- 将打包字段编码为未打包。
- 将整数编码为比需要的更长的 varint 字节序列。
- 多次编码相同(非重复)字段。
- 可能还有其他人。
给定协议缓冲区模式和一些数据,协议缓冲区序列化是否跨库和语言具有确定性?
基本上,无论使用何种库,我能保证相同的数据总是以相同的方式(精确到字节)序列化吗?
一般来说,相同的数据会以完全相同的方式序列化。
但是,protobuf 规范不保证这一点。例如,以下编码差异是允许的,并且必须在所有符合标准的库中解码为相同的结果:
- 编码字段的顺序与标签编号顺序不同。
- 将打包字段编码为未打包。
- 将整数编码为比需要的更长的 varint 字节序列。
- 多次编码相同(非重复)字段。
- 可能还有其他人。