序列化是什么
- 处理对象流的机制,将数据分解成字节流,以便存储在 文件传输 或 网络上传输
- 序列化
序列化特点
- 父类能被序列化,那么子类也能被序列化
- 子类被序列化,父类没被序列化,那么子类中的父类属性会丢失
- 声明为 static 或 transient 的变量不能被序列化
- transient 表示临时变量
- 允许不可序列化类的子类序列化,需要假定子类下负责保存、还原父类的 public/protected 和可访问 package 字段的状态
- 仅在子类扩展的类有一个可访问的无参构造方法来初始化该类的状态
- 非该情况,则声明一个类为可序列化类会报运行时错误
- 反序列化时,不可序列化的字段从该类的 public/protected 无参构造方法中获取
- 可序列化的子类必须能够访问无参数的构造方法,从该数据流中还原
序列化场景
- 实现分布式对象,实现对象在远程主机上服务
- 实现“深复制”一个对象,它可以保留对象的数据,而且递归保存对象引用的每个对象的数据
- 复制对象及引用
序列化接口
- 没有方法或字段,仅可用于标识可序列化的语义
- 序列化和反序列化时对于需要特殊处理的类,要用下列准确签名
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;