我是 Protobuf 的新手,所以不知道这是否可能。如果在 proto 文件中我有一个fixed32数据类型,我是否可以将其升级为fixed64所有现有 fixed32值也可以读取(即向后兼容)?
如果没有,执行此类升级的最佳方法是什么?
tl;dr 是的,但不是您的确切类型。
您可以在 varint 编码类型之间自由移动,因为它们都使用完全相同的在线编码。
从文档:
int32、uint32、int64、uint64和bool都兼容——这意味着您可以将字段从这些类型中的一种更改为另一种,而不会破坏向前或向后的兼容性。如果从连线中解析出的数字不符合相应类型,您将获得与在 C++ 中将该数字强制转换为该类型相同的效果(例如,如果将 64 位数字读取为int32,则将被截断为 32 位)。
遗憾的是,这不适用于fixed32(仅与 兼容sfixed32)和fixed64(仅与 兼容sfixed64)。
如果您已经有大量使用该fixed32字段的数据,则必须创建一个新int64字段并逐渐从现有字段过渡到新字段(新代码读取两个字段但只填充新字段)。