【发布时间】:2015-07-03 14:03:52
【问题描述】:
给定协议缓冲区架构和一些数据,协议缓冲区序列化是否跨库和语言具有确定性?
基本上,无论使用什么库,我是否保证相同的数据总是以相同的方式序列化(直到字节)?
【问题讨论】:
标签: protocol-buffers
给定协议缓冲区架构和一些数据,协议缓冲区序列化是否跨库和语言具有确定性?
基本上,无论使用什么库,我是否保证相同的数据总是以相同的方式序列化(直到字节)?
【问题讨论】:
标签: protocol-buffers
一般来说,相同的数据会以完全相同的方式序列化。
但是,protobuf 规范无法保证这一点。例如,以下编码差异是允许的,并且必须在所有符合标准的库中解码为相同的结果:
【讨论】:
map 的消息以不同的方式序列化,至少在 Ruby 中,它由类似哈希的结构 Google::Protobuf::Map 表示。在不同的等效 Maps 上调用 keys 会产生不同的排序,相应地,序列化似乎以相同的方式不同(我看到字节块的排序方式与 keys 的排序方式相同)。规格确实说map 不保证订购;这似乎是一个公平的结果。