简介:
什么是序列化?简单来说,序列化就是将对象实例的状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它根据流重构对象。这两个过程结合起来,可以轻松地存储和传输数据。
对象序列化反序列化通常用于:
1. 将对象存储于硬盘上
2. 在网络上传送对象的字节序列
这是一个简易的序列化组件,代码不足500行,支持对内置类型、用户自定义类型、STL容器。
这里是介绍序列化的Wiki。
这里是boost的序列化库。
这里是Protobuf,强烈建议没有学习过的同学研究下。
下载地址:
特点:
-
- 接口简单,易于集成,方便维护。
- 基于Policy-based设计模式
- 采用C++流式方式方便易用
- 扩展性强(针对用户自定义类型,输出目标)
- 编译期对用户自定义类型侦错
目标:
-
- 客户端代码接口简洁,使用户代码短小便捷(满足)
- 指针的深度存储与恢复,保存指针所指内存或恢复数据到指针所指向区域,且能正确处理多个指针(满足)
- 对STL容器的支持,能正确处理嵌套容器(满足)
- 支持多种存储方式(目前仅支持文件与内存)
- 非入侵式实现,不需要从某个特定的类派生或实现特定的成员函数(需要友元函数或者另一个名字空间的自由函数)
内部原理:
Tutorial:
1. 基础数据测试,char类型数据内存缓冲区,写入任意类值类型数据,再重新冲读取,判断值是否一致
void TestBasic() { char buf[1024] = {0}; utility::serialize::Serialize os(buf); int b1 = 1; long b2 = 1L; long long b3 &#