C+=對象序列化方案對比

來源:互聯網
上載者:User

轉載自:http://hi.baidu.com/ewook/item/0260f7f3e9082910d6ff8c7f

序列化是將對象狀態資訊轉換為可儲存或傳輸的過程,序列化時,對象會將目前狀態寫入到臨時或持久性的儲存區。以後,可以通過從儲存區中讀取或還原序列化對象的狀態,重新建立該對象。

對象序列化還原序列化通常用於:

1. 將Object Storage Service於硬碟上

2. 在網路上傳送對象的位元組序列

更多介紹

 

常見的C++序列化方案

==Boost.Serialization==

介紹:Boost.Serialization可以建立或重建程式中的等效結構,並儲存為位元據、文本資料、XML或者有使用者自訂的其他檔案。該庫具有以下迷人的特性:

1. 代碼可移植(實現僅依賴於ANSI C++)

2. 深度指標儲存與恢複

3. 可以序列化STL容器和其他常用模版庫

4. 資料可移植

5. 非入侵性

使用:教程

下載Boost庫,並根據需要編譯(Boost庫涉及較廣)。

編寫應用。

●依需求編寫入侵式或非入侵式序列化方法

●支援STL容器類、指標、父子類的序列化

為需要序列化的類添加序列化代碼。

●初始化fstream

●需求初始化xml, text, binary存檔

●寫入對象,並關閉檔案流

 

== MFC Serialization ==

簡介:Windows平台下可使用MFC中的序列化方法。MFC 對 CObject 類中的序列化提供內建支援。因此,所有從 CObject 派生的類都可利用 CObject 的序列化協議。(MSDN中的介紹)

使用

為VS項目添加MFC支援

●設定項目屬性

●包含標頭檔C++:

1 #include <afxwin.h>
2 #include <afxtempl.h>

●編寫繼承CObject的類

●實現序列化方法C++:

1 void Serialize(CArchive& ar);

●添加序列化宏C++:

1 //添加在聲明類中
2 DECLARE_SERIAL(basic_pojo_mfc)
3 //…
4 //添加在實現檔案中
5 IMPLEMENT_SERIAL(MyObject, CObject, 1)

●編寫序列化與還原序列化的對象

●建立CFile,CArchive對象

●寫入對象,關閉資源

 

==Google Protocol Buffers==

簡介:Google Protocol Buffers (GPB)是Google內部是用的資料編碼方式,旨在用來代替XML進行資料交換。可用於資料序列化與還原序列化。主要特性有:

1. 高效

2. 語言中立(Cpp, Java, Python)

3. 可擴充

官方文檔

使用

●下載GPB,並編譯出需要使用的庫。

●編寫.proto檔案,並編譯出.cc與.h檔案。

●依規則編寫.proto

●編譯

●Shell/CMD:

1 protoc -I=$SRC_DIR –cpp_out=$DST_DIR $SRC_DIR/addressbook.proto

●編寫序列化與還原序列化代碼。

 

比較

==測試案例介紹==

比較維度

●序列化與還原序列化消耗的時間

●產生資料檔案大小

測試資料類型

C++:01 //基礎資料型別 (Elementary Data Type)
02 class basic_pojo {
03 public :
04 char char8;
05 unsigned char uchar8;
06 short short16;
07 unsigned short ushort16;
08 int int32;
09 unsigned int uint32;
10 long long32;
11 unsigned long ulong32;
12 float float32;
13 double double64;
14 bool bool8;
15 };
16
17 //複合資料型別
18 class complex_pojo {
19 public :
20 string string_stl;
21 basic_pojo_boost basic_class;
22 };

測試代碼

 

結果

序列化與還原序列化消耗的時間:

 

產生資料檔案大小:

資料:

Protocol BuffersBoost.SerializationMFC:SerializationSerialization(ms)942191218Unserialization(ms)2032961282Archive Size(KB)459044935372

 

結論

Google Protocol Buffers效率較高,但是資料對象必須預先定義,並使用protoc編譯,適合要求效率,允許自訂類型的內部場合使用。Boost.Serialization 使用靈活簡單,而且支援標準C++容器。相比而言,MFC的效率較低,但是結合MSVS平台使用最為方便。希望有時間補充更多的序列化方案及測試單位。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.