2011-09-28 144 views
12

可能重複:
Boost Serialization Library upgradeC++ boost二進制序列化庫向後/向後兼容?

我試圖找到一個C++應用程序序列化的解決方案。我真的很想能夠使用boost二進制序列化。如果我要使用較舊版本的boost二進制序列化庫序列化一個對象,那麼使用更新版本的boost庫的應用程序是否總是能夠讀取它?反之亦然呢?序列化庫的後向/兼容性是什麼?

+2

這將是一個重複,但它沒有滿意的答案。 – julkiewicz

+0

@julkiewicz是的,再加上OP還沒有在現有問題上提供賞金的立場。 –

+0

呃,如果沒有好的重複,爲什麼這個關閉? –

回答

10

他們通過增加標題中的版本來完成它。所以是的,這是兼容的,如果您嘗試讀取使用不兼容版本序列化的二進制數據,您會得到一個優雅的失敗,因爲1.45.0 release notes傾向於指示。此外,1.42和1.43中的錯誤會破壞它!

在版本1.42和1.43下創建的原生二進制檔案遭受嚴重問題。這個最新版本很可能無法讀取它們。這是由於1.42對某些類型的二進制格式進行了一些更改。通常這可以通過檢測寫入歸檔頭中的庫版本號來解決。不幸的是,這個庫的版本號並沒有增加到原來的1.42。所以現在我們有兩個不同的二進制存檔版本,它們具有相同的庫版本號。

我個人把更多的信心Google Protocol Buffers,它explicitly maintains backwards compatibility

您可以添加新的字段到您的報文格式不破壞向後兼容;解析時舊的二進制文件簡單地忽略新字段。

然而,在構建系統方面需要更多的努力,因爲它涉及到使用自動生成的代碼。

+0

+1你的意見:P –

+0

雖然Boost.serialization允許版本化你的數據,雖然(雖然承認它不那麼「神奇」);然而,雖然boost.serialization的不同版本可以爲_same_類定義使用不同的連線格式,但是protobufs連線格式已發佈且看起來不會改變。 – bacar

+0

@Alex B,建議使用GPB作爲文檔格式,其中對象大小在30MB到1GB之間? –