例如,我有下一条消息:
Message Header {
fixed32 messageType;
fixed32 messageSize;
}
我可以确定在任何平台、任何语言上, header 都会以恒定大小的字节数组进行序列化?
最佳答案
是的...是的,应该是可预测的并且大小固定。有效负载是固定大小的, 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 位是预期的,但我想知道是否有任何库没有明确检查这一点!)
实际上:图书馆使用第一种形式。
关于c++ - 我可以在 protobuf 中描述恒定大小的消息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36211408/