什么是序列化
序列化是把数据结构或对象翻译成一种能够被存储(比如:存储在一个文件或内存缓冲区)和传输(比如:通过网络连接)的格式的过程,并在之后重新构造出来(可能是在一个不同的计算机环境中)。
序列化是将对象转换成一系列字节,这样对象就可以很容易地保存到持久存储,或者通过网络进行传输。然后将字节流反序列化——转换成原始对象的副本。
序列化的作用
1) 把对象的字节序列永久地保存到硬盘上(通常存放在一个文件中);
2) 在网络上传送对象的字节序列。
序列化的格式
数据可以使用多种不同的格式进行序列化,比如CSV,XML,JSON和各种二进制格式(如:Avro,Thrift,Protocol Buffers和SequenceFile)。每种格式有各自的优缺点。像CSV,XML和JSON这些文本格式对人类很友好,但在存储空间和解析时间方面并不高效;而二进制格式更加紧凑,在解析上比文本格式更快,但可读性较差。
在数据集较小时,文本和二进制格式之间的序列化/反序列化时间和存储空间差异并不大。因此,首选文本格式处理,因为它更容易管理。而在大数据集上,应首选二进制格式存储大数据集。
问题:如何序列化
序列化一个数据结构,比如二叉树之类,序列化以后会变成一个char数组或者一个string字符串这样,方便你存到文件里面或者通过网络传输。然后要恢复的时候就是“反序列化”,把文件里读出来/从网络收到的char数组或者string恢复成一棵二叉树或者其他什么东西。
问题:那我们网络传输一些数据结构的时候是不是一定要序列化?
答:有抽象数据结构的数据怎么传输呢,比如二叉树,它数据有什么枝节点叶子节点,和数组不同它不是线性的。比如,在tcp协议传输数据的时候,把网络看作一个“流”(类似管道),数据从一边流进去从另一边流出来,但是二叉树要塞到这个“流”里面怎么塞……只能把它变成数组类似的东西,到了另一边再恢复成二叉树,就像运输床的时候要先拆开,到了目的地再把床头啊床板啊什么的装回去。