序列化:将数据结构转换称为二进制数据流或者文本流的过程。序列化后的数据方便在网络上传输和在硬盘上存储。
反序列化:与序列化相反,是将二进制数据流或者文本流转换称为易于处理和阅读的数据结构的过程。
本质其实还是一种协议,一种数据格式,方便数据的存储和传输。
为什么需要序列化?
我们知道,计算机世界往往是根据二进制来区分数据的,例如一个字节、两个字节、三个字节等等,但是,由于在内存中或者磁盘上,或者平台的环境不同,为了方便数据在不同的地方能够具有相同的含义,我们需要将数据转换为一种大家都能识别的格式,二进制或者编码格式是大家都认同的方式,而序列化正好是将一种数据格式转换为二进制数据流的过程或者方法,那么该数据结构就能够在任何地方保持其原有的含义,这就是序列化的意义。
什么是编码?与序列化的区别?
编码也是一种约定数据的含义的方式。与序列化不同,其约定的是更底层一些的数据含义,例如字符的表示,有ASCII、UTF-8、GBK等等,例如整数的表示,1=00000001一个字节,编码约定了数据格式的最小单元,序列化是依赖于字符编码之上的一种数据格式。
二进制流和文本流的区别:二进制流是以二进制为最小单位进行编码,例如多少个bit代表什么,文本流是以字符来进行编码,约定好多少个字节(通常是以字节为单位)代表什么。
最后附一个C/C++序列化库,boost serialization。