我可以在 protobuf 中描述恒定大小的消息吗?

I can describe constant size message in protobuf?

例如,我有下一条消息:

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是continuation flag;其他7位是payload,最低位组在前;这里的varint最大大小应该是10字节,因为只需要 64 位,但我想知道是否有任何库没有明确检查这一点!)

实际上:图书馆使用第一种形式。