2016-01-25 93 views
2

我正在研究C++中的序列化。數據結構的C++序列化

ifstream_obj.read(reinterpret_cast<char *>(&obj), sizeof(obj)); // read 
// or 
ofstream_obj.write(reinterpret_cast<char *>(&obj), sizeof(obj)); // write 
// ? 

和,哪一個是更好地使用:如果與像什麼的boost::serialization優勢/區別?

+4

您的示例僅適用於持有(非POD)或引用(例如,POD)對象的對象。通過指針)其他對象 –

+1

這高度依賴於數據結構。 – NathanOliver

+1

從本質上講,這些樣本是作爲類 –

回答

1

升壓序列化的一大優點是:

  • 它實際上適用於非平凡(POD)的數據類型(C++不是C)
  • 它可以讓你從存檔後端分離序列化代碼,從而爲您提供文本,XML,二進制序列化
  • 如果您使用正確的存檔,您甚至可以具有可移植性(嘗試使用您的示例)。這意味着您可以發送一臺機器/操作系統/版本並在另一臺機器上接收而不會出現任何問題

最後,它增加了(a)抽象層,使事情變得更少錯誤傾向。當然,你可以爲你的建議的序列化方法做同樣的事情,而不會有太多問題。

這裏有一個答案,做那種系列化你的建議,但安全:

注意,升壓序列化是充分認識按位序列化類型的,你可以告訴它你自己太:

+0

您是否在這個問題中引用了我的例子(寫,讀)的這個優點?... – alexj123

+0

@ alexj123還有什麼? – sehe

+0

其實你是在說'boost :: serialization',不是嗎?我認爲我的例子對於「小」項目是有效的(對於那些沒有特別意義的程序)。 – alexj123