例如,我有下一条消息:
Message Header {
fixed32 messageType;
fixed32 messageSize;
}
我可以确定,在任何平台上,在任何语言上,Header都将以恒定大小的字节数组进行序列化吗?
最佳答案
是的... ish,应该是可预测的且固定大小的。有效负载是固定大小的, header 是varint编码的。这里有一个小问题,就是varint规范实际上并未禁止次优编码-理论上它最多可以包含9个零填充的额外字节,而只需设置连续位即可。但是实际上这不是问题。
因此:这些是解释为varint的相同数据(值:1):
预期:
00000001
次优:
10000001 10000000 10000000 10000000 00000000
非常次优:
10000001 10000000 10000000 10000000 10000000 10000000 10000000 10000000 10000000 00000000
(每个字节的MSB是连续标志;其他7位是有效载荷,最低有效组在前;这里的varint的最大大小应该是10个字节,因为只需要64位,但是我想知道是否有任何库没有没有明确检查!)
实际上:图书馆使用第一种形式。