2017-09-07 97 views
1

我是Protobuf的新手,所以不知道這是否可行。如果在原始文件中我有一個fixed32數據類型,我可以將它升級到fixed64,這樣所有的值都可以被讀取(即向後兼容)嗎?protobuf數據類型可以升級嗎?

如果不是,執行此類升級的最佳方法是什麼?

回答

1

tl; dr是的,但不是與您的確切類型。

您可以在varint編碼類型之間自由移動,因爲它們全部使用完全相同的編碼。

documentation

int32uint32int64uint64bool都是兼容的 - 這意味着你可以在現場從這些類型到另一種改變不破壞forwards-或向後兼容。如果從不符合相應類型的連線解析數字,則會得到與在C++中將該數字轉換爲該類型相同的效果(例如,如果將64位數字讀爲int32,它將被截斷爲32位)。

可悲的是,這並不適用於fixed32(這是唯一與sfixed32兼容)和fixed64(這是唯一與sfixed64兼容)。

如果你已經有很多使用fixed32現場數據,你必須創建一個新的int64領域,並逐步從現有的過渡場到新一個(新的代碼讀取這兩個領域,但只有填充新) 。

相關問題