序列化:
- java中如果要把IO流把内容写入文件中,需要把这些内容转为二进制流写入文件中,因为磁盘操作只允许通过二进流。
- 如果要把这些内容转为二进制流就需要序列化,自定义类需要serialzable接口,那么,为什么String、int、char等类型就不需要实现该接口呢?因为它们的包装类String、Integer已经实现了这个接口。
对象序列化:
- 把对象拆分成一个一个的字节序列,把每个字节序列都编上序号,然后按照这个序列往文件中写
反序列化规范:按照对象序列化时每个字节序列编号实现对象的拼接
- 例如:正常情况下是需要找每个模块的规律完成拼装,但是拼装好的图块拆分时每个小块都编上号码,下一次再拼装时按照这个编号就会很容易的拼装,也就不需要再找规律了。
反序列化:
- 按照序列化的序号,把对象从文件中读取出来,反序列化时就会按照反序列化规范重构(也就是从文件中读出编好号的序列拼接成一个对象)
- 其实反序列化也是对象创建的一种方式,只是因为有反序列化规范,采用了重构。
既然反序列化也是创建对象的一种方式那么这个过程是什么样呢?
class A{
public A(){}
}
class B extends A implements Serializable{
public B(){}
}
- 当B反序列化时,也相当于创建B对象过程,首先会加载A对象,调用A的无参构造方法,到B类时不会调用B的构造方法,因为B实现了serializable接口,就会采用反序列化规范重构对象,不会再调用B的无参构造方法(其实对象的重构也是对象的创建只是总从了反序列化规范,不会真正意义的创建对象,但是创建对象的步骤不能少)