2017-09-07 64 views
1

我是Protobuf的新手,所以不知道这是否可行。如果在原始文件中我有一个fixed32数据类型,我可以将它升级到fixed64,这样所有的值都可以被读取(即向后兼容)吗?protobuf数据类型可以升级吗?

如果不是,执行此类升级的最佳方法是什么?

回答

1

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

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

documentation

int32uint32int64uint64bool都是兼容的 - 这意味着你可以在现场从这些类型到另一种改变不破坏forwards-或向后兼容。如果从不符合相应类型的连线解析数字,则会得到与在C++中将该数字转换为该类型相同的效果(例如,如果将64位数字读为int32,它将被截断为32位)。

可悲的是,这并不适用于fixed32(这是唯一与sfixed32兼容)和fixed64(这是唯一与sfixed64兼容)。

如果你已经有很多使用fixed32现场数据,你必须创建一个新的int64领域,并逐步从现有的过渡场到新一个(新的代码读取这两个领域,但只有填充新) 。

相关问题