C++对象序列化简介与选型
来源:互联网 发布:平面用矩阵表示 编辑:程序博客网 时间:2024/05/19 11:47
C++对象序列化,与文件保存类似,但是不一样。比如在运行过程中,需要保存某个对象,是串行化特有的功能。面向对象的语言都有这个功能,比如java。下面是转自wiki 的介绍:http://code.google.com/p/plumgo/wiki/HSNNS_ObjectSerialization
C++ Serialization Schemes
常见C++序列化方案 :介绍已有的C++序列化解决方案
Boost.Serialization
简介
Boost.Serialization可以创建或重建程序中的等效结构,并保存为二进制数据、文本数据、XML或者有用户自定义的其他文件。该库具有以下吸引人的特性:
- 代码可移植(实现仅依赖于ANSI C++)。
- 深度指针保存与恢复。
- 可以序列化STL容器和其他常用模版库。
- 数据可移植。
- 非入侵性。
使用
- 下载Boost库,并根据需要编译(Boost库涉及较广)。下载
- 编写自己的应用。
- 依需求编写入侵式或非入侵式序列化方法。
- 支持STL容器类、指针、父子类的序列化。
- 为需要序列化的类添加序列化代码。
- 初始化fstream。
- 依需求初始化xml, text, binary存档。
- 写入对象,并关闭文件流。
教程
MFC Serialization
简介
Windows平台下可使用MFC中的序列化方法。MFC 对 CObject 类中的序列化提供内置支持。因此,所有从 CObject 派生的类都可利用 CObject 的序列化协议。
MSDN中的介绍
使用
- 为VS项目添加MFC支持
- 设置项目属性。
- 包含头文件。
#include <afxwin.h>#include <afxtempl.h>
- 编写继承CObject方法的类
- 实现序列化方法。
void Serialize(CArchive& ar);
- 添加序列化宏。
//添加在声明类中DECLARE_SERIAL(basic_pojo_mfc)//...//添加在实现文件中IMPLEMENT_SERIAL(MyObject, CObject, 1)
- 实现序列化方法。
- 编写序列化与反序列化的代码
- 创建CFile,CArchive对象。
- 写入对象,关闭资源。
Google Protocol Buffers
简介
Google Protocol Buffers (GPB)是Google内部是用的数据编码方式,旨在用来代替XML进行数据交换。可用于数据序列化与反序列化。主要特性有:
- 高效
- 语言中立(Cpp, Java, Python)
- 可扩展
官方文档
使用
- 下载GPB,并编译出需要使用的库。
- 编写.proto文件,并编译出.cc与.h文件。
- 依规则编写.proto
- 编译:
protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto
- 编写序列化与反序列化代码
Comparison
序列化方案比较与选型
Test Case
测试用例介绍
- 比较维度
- 序列化与反序列化消耗时间
- 产生数据文件大小
- 测试数据类
//基本数据类型class basic_pojo {public : char char8; unsigned char uchar8; short short16; unsigned short ushort16; int int32; unsigned int uint32; long long32; unsigned long ulong32; float float32; double double64; bool bool8;};//复合数据类型class complex_pojo {public : string string_stl; basic_pojo_boost basic_class;};
- 测试代码
Results
比较结果
- 序列化与反序列化消耗时间
- 产生数据文件大小
- 数据:
Conclusion
结论
- Google Protocol Buffers效率较高,但是数据对象必须预先定义,并使用protoc编译,适合要求效率,允许自定义类型的内部场合使用。
- Boost.Serialization 使用灵活简单,而且支持标准C++容器。
- 相比而言,MFC的效率较低,但是结合MSVS平台使用最为方便。
- C++对象序列化简介与选型
- C++对象序列化简介与选型
- C++对象序列化简介与选型
- C++对象序列化简介与选型
- 序列化与反序列化:本质与选型
- "对象的序列化"简介
- java 对象序列化简介
- MEMS 微惯导的选型对比与简介
- 序列化与对象克隆
- C/C++对象的序列化
- C#-实体对象的可序列化
- Java 流(Stream)简介:3、对象序列化
- 对象序列化与反序列化
- 序列化与反序列化对象
- 对象序列化与反序列化
- 对象序列化与反序列化
- 对象序列化 与反序列化
- 对象序列化与反序列化
- swprintf(buff,_T("%lf"),m_num1+m_num2);
- 在Eclipse中配置可调试无错误的Launcher源码
- ZBarSDK–读取条形码信息
- eclipse的相关设置
- Croc Round1 D Connected Components
- C++对象序列化简介与选型
- QTP UNPLUGGED中文版封面出炉
- android应用安全——数据安全
- 一个程序员的迷茫
- 尚学堂JAVA视频教程(java培训内部视频)
- android avd manager.exe闪一下就消失的解决方法
- 关于常见排序算法的稳定性分析和结论
- 基于stm32f103zet6之DS18B20的学习
- 通过代码分析得到一些对虚函数的 理解