protobuf数据类型可以升级吗?

时间:2017-09-07 20:02:42

标签: protocol-buffers

我是Protobuf的新手,所以不知道这是否可行。如果在原型文件中我有fixed32数据类型,我可以将其升级到fixed64,以便还可以读取所有现有的 fixed32值(即向后兼容性) )?

如果没有,执行此类升级的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

tl; dr是的,但不是您的确切类型。

您可以在varint编码类型之间自由移动,因为它们都在线路上使用完全相同的编码。

来自documentation

  

int32uint32int64uint64bool都是兼容的 - 这意味着您可以将字段从其中一种更改为另一个没有打破向前或向后兼容性。如果从导线中解析出一个不适合相应类型的数字,您将获得与在C ++中将该数字转换为该类型相同的效果(例如,如果将64位数字读作{{ 1}},它将被截断为32位)。

遗憾的是,这不适用于int32(仅与fixed32兼容)和sfixed32(仅与fixed64兼容)。

如果您已使用sfixed64字段获得了大量数据,则必须创建新的fixed32字段并逐渐从现有字段转换为新字段(新代码会同时读取这两个字段)但只填充新的)。