第三章Java对象的序列化与反序列化
1.对象序列化与反序列化的基本概念
2.实现序列化的基本过程
Serializable和Externalizable接口
ObjectOutputStream和ObjectInputStream
3.自定义序列化的两种方式
4.默认序列化方式与自定义序列化方式的比较
5.类不同版本的序列化兼容性
对象序列化
对象序列化:将Java对象转化成二进制字节流的过程。
对象反序列化: 将二进制字节流恢复为Java对象的过程。
对象序列化的主要用途:
(1)将对象的字节序列永久的保存到硬盘上,通常存放在一个文件中。
(2) 在网络中跨虚拟机传递对象。
Serializable和Externalizable接口
序列化的过程:
(1)只有实现了Serializable和Externalizable接口的类的对象才能进行序列化操作。
Externalizable接口继承自Serializable口,
实现Externalizable接口的类需要自行控制序列化的行为。
实现Serializable接口的类采用默认的序列化方式。
JDK类库中的部分类(String,封装类和Date类等)都实现了Serializable接口。ObjectInputStream和ObjectOutputStream
(2) 对象输入和输出流
构造方法:
ObjectInputStream(InputStream in)
ObjectOutputStream(OutputStream out)
见源文件:ObjectSerTest.java
ObjectInputStream
ObjectInputStream按照默认方式进行反序列化时,具有以下特点:
(1) 如果内存中对象所属的类还没有加载,那么会加载并初始化这个类。如果在classpath中找不到相应的类文件,抛出ClassNotFoundException。