序列化和反序列化是相对的,你可以就将其理解为数据的的编码和解码过程。一种语言系统下的数据结构只有在当前这个系统下才能够识别运行;当数据需要跨语言跨系统传输时,必须将其转成一种中间结构,这个中间结构能被双方识别、还原,这个过程就是序列化和反序列化。
使用场景
通常有两个用途,存储和传输,其实都是转储(转储,由一存储介质转移到另一存储介质)
- 最常见的是将数据由内存存储到硬盘。数据或者对象在俩者之间的表示是有区别的,为了能在两者之间还原对象,需要以特定的方式读取和写入数据或者对象。
- 又比如,在java中表示的一个数据对象结构和Javascript表示的对象结构是不同的。那么通过将java中的一个数据对象序列化成一个Javascript能够识别结构(JSON格式),javascript就能将其还原成语义相同的数据,在Javascript执行环境下运行
- 还有图像数据的传输你也可以认为是一个序列化和反序列化的过程,在传输前将图像信息序列化成一个二进制数据流带上图像格式信息,接收方在接收到二进制流后识别出图像格式,将其还原为相应的图像对象显示出来
- 反序列化克隆:
JSON
总结
序列化,将数据结构或对象转换成二进制串的过程。反序列化,将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。
无论是进程间、线程间的通讯,或者client和server通过socket通讯,还是把对象写到db(实际上也是socket)。 这些交互都是通过收发二进制流的,所以发送时候需要将对象序列化二进制数据发送出去,之后接收端收到二进制数据,再通过反序列化变成对象。