一、什么是序列化
序列化是指将Java对象转化为与平台无关的二进制流,这些字节序列可以永久的保存在磁盘上或通过网络传输传到其他网络节点。
如果某个类是可序列化的,则该类必须实现以下两个接口之一:
- Serializable
- Externalizable
二、对象的序列化
- 使用对象流实现序列化
- 创建ObjectOutputStream。该流是一个处理流需要建立在其他节点流的基础之上。
- 调用ObjectOutoutStream的writeObject()方法输出可序列化对象。
- 反序列化步骤
- 创建ObjectInputStream。该流是一个处理流需要建立在其他节点流的基础之上。
- 调用ObjectInputStream的readObject()方法读取流中对象。该方法返回Object类型的对象,需进行强制类型转化。
注意:
- 反序列化读取的仅仅是Java对象的数据而不是Java类,因此在反序列化时必须提供Java对象所属类的class文件。
- 反序列化机制无需通过构造器来初始化对象。
- 当一个可序列化类有多个父类时,这些父类要么有无参构造器要么也是可序列化的——否则反序列化时将抛出InvalidClassException异常。
- 如果父类是不可序列化的,只是带有无参构造器,则该父类中定义的成员变量值不会序列化到二进制流中。
- 对象引用的序列化
- 如果某个类的成员