什么是序列化?
序列化是把内存中易丢失的数据结构或对象状态转换成另一种可存储(存储到磁盘),可在网络间传输的状态的数据,然后可以在以后某一时刻再恢复到序列化之前的数据状态!
序列化本质也是数据形式的转化!一种形式转化成另一种形式!
为什么要序列化?
序列化是一种不依赖于硬件的数据格式!
序列化是把内存中数据状态A转化成另一种数据状态B,并在稍后重构成A状态!状态恢复的时候,可能物理环境和JVM实现和以前不同了!所以
这种数据状态B要求适用于不同的物理硬件,不同的JVM实现,不同的语言(语言不同,数据结构实现也不同)!
序列化是把内存中数据直接复制一份吗?
所以,不能把内存中数据结构直接按照字节复制下来,拷贝到磁盘文件!这样数据状态在不同结构的软件环境/硬件中就不能复原了!
序列化以独立于硬件之外的格式来序列化数据结构,要避开字节顺序、内存布局、或在不同编程语言中数据结构如何表示等等之类的问题。所以绝不是仅仅复制一份内存数据那么简单!一定有抽象的序列化的结构!
序列化到底是什么?
所以,序列化是把内存中某一时刻数据状态,转换成不依赖硬件,不依赖不同JVM,不依赖编程语言的,以便在稍后复原的另一种数据状态;
这种状态可以在网络间传输,可以存储到不同硬件磁盘,可以在不同的编程语言环境复原!
序列化有什么用?
最大的作用:记录某一时刻数据结构的状态或者对象的状态,并在将来某一时刻恢复!
具体应用可以有:
1)网络间数据传输
2)数据存储(磁盘中,数据库中)
3)远程过程调用时,可以用来做克隆对象!
4)实现分布式对象,
5)分布式环境探测某数据结构的变化;
序列化的格式有哪些?
序列化的格式也是一种结构化的格式,然后把结构化的格式转化为二进制来存储,传输!
序列化的结构化格式有Yaml,Json,xml,
Yaml具有加强序列化的功能。
Json是轻量级文字替代的功能;
Xml比较重,除了数据状态之外的序列化格式占用不少数据比重!
相关问题:内存中类结构是什么样的?
参考
维基百科