2010-11-14 26 views
0

我在寫一個特定的序列化系統。第一個版本運作良好。它是一個分層的字符串鍵,數據值系統。因此,要獲得一個特定的值,您導航到一個特定節點,並說getInt(「一些關鍵」)等等,等等使文件格式可擴展

我的問題與當前的系統文件的大小變得非常大非常快。

我打算通過添加一個字符串表來解決這個問題。與此相關的問題是我無法想出一種支持舊系統的方法。我所擁有的是一個32位長的文件標識符。

我可以更改文件標識符,但每次我再拍變化的格式,我需要再次更改標識符。

什麼是實現新功能,同時還支持舊擁有優雅的方式是什麼?

我研究的PNG格式和創建塊似乎是個不錯的路要走。

是否有任何其他建議,您可以給我塊的依賴等等?

回答

2

如果您需要二進制格式,請查看Protocol Buffers,Google在內部用於RPC以及長期的記錄序列化。協議緩衝區的每個字段由整數ID標識。舊應用程序會忽略(並通過)他們不理解的字段,因此您可以安全地添加新字段。您永遠不會重複使用已棄用的字段ID或更改字段的類型。

協議緩衝器支持原始類型(布爾,INT32,int64類型,字符串,字節陣列),以及重複甚至遞歸嵌套的消息。不幸的是,他們不支持地圖,所以你必須將地圖變成(鍵,值)列表。

不要花時間煩惱序列化和反序列化。它不像設計protobufs那麼有趣。

+0

謝謝,我馬上就讀它! – Brad 2010-11-14 11:27:31