1
我是Protobuf的新手,所以不知道這是否可行。如果在原始文件中我有一個fixed32
數據類型,我可以將它升級到fixed64
,這樣所有的值都可以被讀取(即向後兼容)嗎?protobuf數據類型可以升級嗎?
如果不是,執行此類升級的最佳方法是什麼?
我是Protobuf的新手,所以不知道這是否可行。如果在原始文件中我有一個fixed32
數據類型,我可以將它升級到fixed64
,這樣所有的值都可以被讀取(即向後兼容)嗎?protobuf數據類型可以升級嗎?
如果不是,執行此類升級的最佳方法是什麼?
tl; dr是的,但不是與您的確切類型。
您可以在varint編碼類型之間自由移動,因爲它們全部使用完全相同的編碼。
int32
,uint32
,int64
,uint64
和bool
都是兼容的 - 這意味着你可以在現場從這些類型到另一種改變不破壞forwards-或向後兼容。如果從不符合相應類型的連線解析數字,則會得到與在C++中將該數字轉換爲該類型相同的效果(例如,如果將64位數字讀爲int32
,它將被截斷爲32位)。
可悲的是,這並不適用於fixed32
(這是唯一與sfixed32
兼容)和fixed64
(這是唯一與sfixed64
兼容)。
如果你已經有很多使用fixed32
現場數據,你必須創建一個新的int64
領域,並逐步從現有的過渡場到新一個(新的代碼讀取這兩個領域,但只有填充新) 。