简单来说,序列化,就是将数据转换成可储存可传输的数据格式的一个过程;而反序列化,则是将该数据格式重新组合成一个完整的数据对象的过程。
那么,我们为什么要序列化呢?
我认为有以下几个原因:
1、便于数据的存储和传输
打个比方,现在我们有一个树形的结构,想要把它从网络的这一端传输到另外一端,我们需要通过网络通道进行传输,但是由于树形的结构过于不规范,“枝叶繁茂”,网络的管道大小有限,“不够粗”,这样子,为了防止树被卡主了,我们就将这棵树按照一定的序列把它的枝叶“砍下来”,和躯干等组成一个有序的字节流,从而轻便的通过网络通道到达另一端,再进行组合成我们完整的树。
当然,这个例子可能并不是那么的恰当,只要能理解序列化能帮我们进行更有效的数据传输就好
2、以某种形式将自定义的对象持久化
从某种意义上来说,我们在自定义自己的对象的时候,可以说她是虚拟的,不管她被我们定义的多么好,当程序关闭的时候,她就会消失,下次再见到她的时候,就不一定是那个她了。如果我们将对象序列化,那么,在保存对象时,系统会把其状态保存为一组有顺序的字节,当我们以后需要用到的时候,就可以按这个顺序读取并还原出原来的对象(也就是,反序列化)。必须注意地是,对象序列化保存的是对象的"状态",即它的成员变量。由此可知,对象序列化不会关注类中的静态变量
* 二进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用。例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象。您可以将对象序列化到流、磁盘、内存和网络等等。
* XML 序列化仅序列化公共属性和字段,且不保持类型保真度。当您要提供或使用数据而不限制使用该数据的应用程序时,这一点是很有用的。由于 XML 是一个开放式标准,因此,对于通过 Web 共享数据而言,这是一个很好的选择。SOAP 同样是一个开放式标准,这使它也成为一个颇具吸引力的选择。