Java回顾之序列化
在这篇文章里,我们关注对象序列化。 首先,我们来讨论一下什么是序列化以及序列化的原理;然后给出一个简单的示例来演示序列化和反序列化;有时有些信息是不应该被序列化的,我们应该如何控制;我们如何去自定义序列化内容;最后我们讨论一下在继承结构的场景中,序列化需要注意哪些内容。 序列化概述 序列化,简单来讲,就是以“流”的方式来保存对象,至于保存的目标地址,可以是文件,可以是数据库,也可以是网络,即通过网络将对象从一个节点传递到另一个节点。 我们知道在Java的I/O结构中,有ObjectOutputStream和ObjectInputStream,它们可以实现将对象输出为 二进制流,并从二进制流中获取对象,那为什么还需要序列化呢?这需要从Java变量的存储结构谈起,我们知道对Java来说,基础类型存储在栈上,复杂类 型(引用类型)存储在堆中,对于基础类型来说,上述的操作时可行的,但对复杂类型来说,上述操作过程中,可能会产生重复的对象,造成错误。 而序列化的工作流程如下: 1)通过输出流保存的对象都有一个唯一的序列号。 2)当一个对象需要保存时,先对其序列号进行检查。 3)当保存的对象中已包含该序列号时,不需要再次保存,否则,进入正常保存的流程。 正是通过序列号的机制,序列化才可以完整准确的保存对象的各个状态。 序列化保存的是对象中的各个属性的值