什么是序列化和反序列化
序列化:可以将对象转化成一个字节序列,便于存储。
反序列化:将序列化的字节序列还原。
优点:可以实现对象的”持久性”, 所谓持久性就是指对象的生命周期不取决于程序。
序列化方式1: 实现Serializable接口(隐式序列化)
通过实现Serializable接口,这种是隐式序列化(不需要手动),这种是最简单的序列化方式,会自动序列化所有非static和 transient关键字修饰的成员变量。
序列化方式2:实现Externalizable接口(显式序列化)
实现Externalizable接口继承自Serializable, 我们在实现该接口时,必须实现writeExternal()和readExternal()方法,而且只能通过手动进行序列化,并且两个方法是自动调用的,因此,这个序列化过程是可控的,可以自己选择哪些部分序列化
序列化方式3:实现Serializable接口+添加writeObject()和readObject()方法。(显+隐序列化)
如果想将方式1和方式2的优点都用到的话,可以采用方式3, 先实现Serializable接口,并且添加writeObject()和readObject()方法。注意这里是添加,不是重写或者覆盖。但是添加的这两个方法必须有相应的格式。
- 方法必须要被private修饰 —–>才能被调用
- 第一行调用默认的defaultRead/WriteObject() —–>隐式序列化非static和transient
- 调用read/writeObject()将获得的值赋给相应的值 —–>显式序列化