cereal C 實現的開源序列化庫

2021-07-04 04:31:48 字數 1221 閱讀 4625

閒來無事發現了乙個基於c++實現的序列化工具,相比於其他(比如boost serialization或google protobuf,恰巧都用過,以後再介紹),使用簡單,感覺不錯,下面做個摸索。

cereal介紹

cereal是乙個開源的(bsd license)、輕量級的、支援c++11特性的、僅僅包含標頭檔案實現的、跨平台的c++序列化庫。它可以將任意的資料型別序列化成不同的表現形式,比如二進位制、xml格式或json。cereal的設計目標是快速、輕量級、易擴充套件——它沒有外部的依賴關係,而且可以很容易的和其他**封裝在一塊或者單獨使用。

cereal支援標準庫的幾乎每乙個型別的序列化。cereal也完全支援繼承和多型。由於cereal被設計為乙個精簡、快速的庫,它不像其他序列化庫(比如boost)在同一層次上會進行物件跟蹤,這也導致了它不支援原始指標(raw pointer)和引用,但是智慧型指標(比如std::shared_ptr和std​​::unique_ptr)是沒有問題的。

cereal適用於基於c++11標準的各種編譯器

cereal使用了一些c++11的新特性,因此需要乙個相容性更好的的c++編譯器才能正常工作。已被驗證可用的編譯器有g++4.7.3、clang++3.3、msvc2013,或者更新版本。

它也可能可以在老版本編譯器上工作,但並不保證完全支援。當使用g++或clang++編譯器時,cereal同時需要libstdc++和libc++庫。

cereal:更快速,更好的壓縮

在簡單的效能測試中,cereal通常比boost的序列化庫速度更快,而且產生的二進位制形式占用更少的空間,尤其是針對更小的物件。cereal使用了c++中的速度最快的xml和json解析器和包裝器。

cereal是可擴充套件的

cereal提供了對標準庫的序列化支援,比如二進位制的,xml和json序列化器。

cereal的源**相比boost來講,更容易理解和擴充套件。 如果你需要別的東西,cereal可以很容易地擴充套件,比如新增自定義序列化存檔或型別。

cereal是易於使用的

在**增加cereal序列化功能可以簡化為包含乙個標頭檔案,寫乙個序列化函式。無論是從概念上還是**層次上,cereal的功能都是自文件化的。

如果你使用錯誤,cereal盡可能的在編譯期觸發靜態斷言。

對於boost使用者來說,cereal提供了相似的語法,如果你使用過boost的序列化庫,你會發現cereal的語法看起來很熟悉。

如果你是從boost轉向使用cereal,一定要閱讀這個過渡指南:

開源抽象工廠模式,序列化,反序列化等

daniu.core access common oledbhelper.cs相當於sqlhelper,其他的類檔案作用與dal層檔案類似,主要與資料庫打交道的。common資料夾 主要是一些全域性靜態方法,欄位等。data 很多藉口,抽象工廠設計模式?entity 實體類 service 各種管理...

序列化(序列化)

原書上翻譯為序列化,msdn翻譯為序列化 作用 當需要儲存,或者網路傳輸 remoting時,資料 物件或值 需要序列化 類似於打包傳輸檔案。system.serializableattribute 序列化是指儲存和獲取磁碟檔案 記憶體或其他地方中的物件。在序列化時,所有的例項資料都儲存到儲存介質上...

序列化與反序列化,Java實現

public class serializingutil catch ioexception e finally catch ioexception e return byteout.tobytearray 功能簡述 將位元組陣列反序列化為實體bean.param source 需要進行反序列化的位...