我有一個問題關於serializaton數據結構。數據結構的序列化有很多種可能(也稱爲編組或縮減,參見wiki-article)。每種編程語言,框架,標準或庫似乎都帶有自己的序列化方法。許多人還定義了他們自己的數據/接口描述語言(我更喜歡僅在代碼內定義的語言依賴數據結構)。只是僅舉幾例(見wiki-article):COM IDL,CORBA IDL,節儉IDL,谷歌協議緩衝 「.proto」,XSD,ASN.1 IDL,等等。其中一些序列化能夠生成語言原生數據結構和用於序列化和反序列化這些結構的代碼。易於使用的可擴展序列化/編組?
我做了關於這個問題的一些研究,但我仍然未定。所以我的問題是: 我應該使用哪種序列化?
我要求:擴展,空間效率(至少二進制),高效地訪問數據,安心使用(可能與所生成的代碼和吸氣劑和setter)和C++ - 保持兼容。
可擴展性應提供向前和向後兼容性。更具體地說,我寫的數據格式通常會隨着時間的推移而增長,因爲我添加了新的數據字段,這在開發之初我無法預見。現在,我希望能夠使用較新的軟件版本讀取過時格式的存儲數據,舊的存儲數據中找不到的數據字段可以使用默認值或其他值填充。另一方面,我希望能夠讀取使用新描述書寫的數據。未知數據字段應該被用「舊」數據描述編譯的軟件忽略(可能會產生一些警告)。
任何推薦?關於該主題的進一步閱讀推薦,也將不勝感激。
---編輯---
1)的boost ::序列化似乎是相當受歡迎的。 它有一些非常好的功能,文檔非常好,諺語似乎很直截了當。也許我有點挑剔,但也有一些我不喜歡的東西:我不明白它如何處理向前兼容(見4)。我寧願生成的代碼。
2)谷歌protobuf似乎適合我的需要更好,但我沒有看着他們的深度。他們似乎很好地處理向前和向後的可塑性(參見5)。他們有用於不同語言的代碼生成器,開發人員知道類似的概念(請參閱FAQ)。我將深入研究protobufs。
3)提升精神似乎並沒有成爲我尋找的東西。
是的,不幸的是前向兼容性缺乏boost :: serialization。另外,在以前的boost :: serialization版本中,我在Mac和PC上生成的XML文件中遇到了一些細微的差異,所以對於該格式的完美兼容性也存在疑問。挖掘Protobuf聽起來像是最好的主意,請告訴它走向何方。 – 2011-03-01 18:59:58