protobuf数据类型可以升级吗?
问题描述:
我是Protobuf的新手,所以不知道这是否可行。如果在原始文件中我有一个fixed32
数据类型,我可以将它升级到fixed64
,这样所有的值都可以被读取(即向后兼容)吗?protobuf数据类型可以升级吗?
如果不是,执行此类升级的最佳方法是什么?
答
tl; dr是的,但不是与您的确切类型。
您可以在varint编码类型之间自由移动,因为它们全部使用完全相同的编码。
int32
,uint32
,int64
,uint64
和bool
都是兼容的 - 这意味着你可以在现场从这些类型到另一种改变不破坏forwards-或向后兼容。如果从不符合相应类型的连线解析数字,则会得到与在C++中将该数字转换为该类型相同的效果(例如,如果将64位数字读为int32
,它将被截断为32位)。
可悲的是,这并不适用于fixed32
(这是唯一与sfixed32
兼容)和fixed64
(这是唯一与sfixed64
兼容)。
如果你已经有很多使用fixed32
现场数据,你必须创建一个新的int64
领域,并逐步从现有的过渡场到新一个(新的代码读取这两个领域,但只有填充新) 。