參考鏈接:最常用的兩種C++序列化方案的使用心得(protobuf和boost serialization)
[c++] Google Protobuf庫
1. 什么是序列化?
程序員在編寫應用程序的時候往往需要將程序的某些數據存儲在內存中,然后將其寫入某個文件或是將它傳輸到網絡中的另一台計算機上以實現通訊。這個將 程序數據轉化成能被存儲並傳輸的格式的過程被稱為“序列化”(Serialization),而它的逆過程則可被稱為“反序列化” (Deserialization)。
簡單來說,序列化就是將對象實例的狀態轉換為可保持或傳輸的格式的過程。與序列化相對的是反序列化,它根據流重構對象。這兩個過程結合起來,可以輕 松地存儲和傳輸數據。例如,可以序列化一個對象,然后使用 HTTP 通過 Internet 在客戶端和服務器之間傳輸該對象。
總結:序列化:將對象變成字節流的形式傳出去。
反序列化:從字節流恢復成原來的對象。
2. 為什么要序列化?好處在哪里?
簡單來說,對象序列化通常用於兩個目的:
(1) 將對象存儲於硬盤上 ,便於以后反序列化使用
(2)在網絡上傳送對象的字節序列
對象序列化的好處在哪里?網絡傳輸方面的便捷性、靈活性就不說了,這里舉個我們經常可能發生的需求:你 有一個數據結構,里面存儲的數據是經過很多其它數據通過非常復雜的算法生成的,由於數據量很大,算法又復雜,因此生成該數據結構所用數據的時間可能要很久 (也許幾個小時,甚至幾天),生成該數據結構后又要用作其它的計算,那么你在調試階段,每次運行個程序,就光生成數據結構就要花上這么長的時間,無疑代價 是非常大的。如果你確定生成數據結構的算法不會變或不常變,那么就可以通過序列化技術生成數據結構數據存儲到磁盤上,下次重新運行程序時只需要從磁盤上讀 取該對象數據即可,所花費時間也就讀一個文件的時間,可想而知是多么的快,節省了我們的開發時間。
3. Google Protocol Buffers (protobuf)
Google Protocol Buffers (GPB)是Google內部使用的數據編碼方式,旨在用來代替XML進行數據交換。可用於數據序列化與反序列化。主要特性有:
>優點
1. 性能好,效率高
2. 代碼生成機制,數據解析類自動生成
3. 支持向后兼容和向前兼容
4. 支持多種編程語言(java,c++,python)
>缺點
1. 應用不夠廣
2. 二進制格式導致可讀性差(二進制格式)
3. 缺乏自描述