1、序列化:
1)序列化概念:程序员在编写应用程序的时候往往需要将程序的某些数据存储在内存中,然后将其写入某个文件或是将它传输到网络中的另一台计算机上以实现通讯。这个将程序数据转化成能被存储并传输的格式的过程被称为“序列化”(Serialization),
而它的逆过程则可被称为“反序列化” (Deserialization)。简单来说,序列化就是将对象实例的状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它根据流重构对象。这两个过程结合起来,可以轻松地存储和传输数据。例如,可以序列化一个对象,然后使用HTTP通过 Internet 在客户端和服务器之间传输该对象。
总结如下:
序列化:将对象或者数据结构变成字节流的形式传出去。
反序列化:从字节流恢复成原来的对象。
2、为什么要序列化?有什么好处?
(1)方便网络传输
我们都知道,socket的数据都是以字符串进行传输,而序列化的作用就是将复杂的数据结构转换成字符串。
(2)方便协议解释
序列化中的“序”就是有序的意思,有序的字符串序列可以供绝大多数的编程语言解释。而Protocol Buffers就是其中的突出代表。
(3)方便数据存储
方便数据存储这个好理解,就是解决一对多的问题。不用序列化可能需要存储多条信息,而序列化可以将多条数据合成一条进行存储;方便数据运维。
3、对象序列化的几种方法:
3.1 Google Protocol Buffers(protobuf)
Google Protocol Buffers (GPB)是Google内部使用的数据编码方式,旨在用来代替XML进行数据交换。
可用于数据序列化与反序列化。主要特性有:
. 高效
. 语言中立(Cpp, Java, Python)
. 可扩展
3.2 Boost.Serialization
Boost.Serialization可以创建或重建程序中的等效结构,并保存为二进制数据、文本数据、XML或者有用户自定义的其他文件。
该库具有以下吸引人的特性:
. 代码可移植(实现仅依赖于ANSI C++)
. 深度指针保存与恢复
. 可以序列化STL容器和其他常用模版库
. 数据可移植
. 非入侵性
3.3 MFC Serialization
Windows平台下可使用MFC中的序列化方法。MFC 对 CObject 类中的序列化提供内置支持。
因此,所有从 CObject 派生的类都可利用 CObject 的序列化协议。
3.4 .Net Framework
.NET的运行时环境用来支持用户定义类型的流化的机制。它在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。 在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。
一般最常用的就是前面两种,各有利弊,有待补充。。。