什么是序列化
用一个 字节 序列可以表示一个对象,该 字节 序列包含该 对象的数据,对象的 类型 和 对象中存储的属性 等信息
字节 序列写出到文件之后,相当于文件中持久保存了一个对象的信息
字节 序列还可以从文件中读取回来,重构对象,对它进行 反序列化
对象的数据、 对象的类型 和 对象中 存储的数据 信息,都可以用来在内存中创建对象
序列化条件
该类必须 实现 java.io.Serializable
接口
Serializable 是一个 标记接口,不实现此接口的类将 不会使任 何状态 序列化或反序列化,会抛出 NotSerializableException
该 类 的所有属性必须是 可序列化 的。如果有一个属性不需要可序列化的,则该属性必须注明是 瞬态
的,使用 transient
关键字修饰
ObjectOutputStream类
作用
将 Java 对象的原始数据类型写出到文件,实现对象的持久存储
构造方法
public ObjectOutputStream(OutputStream out) :创建一个指定 OutputStream 的 ObjectOutputStream。 构造举例
写出对象方法
public final void writeObject (Object obj)
- 创建 Person 类
1 | public class Person implements Serializable { |
- 写到文件当中
1 | public static void main(String[] args) throws Exception { |
ObjectInputStream类
作用
ObjectInputStream 反序列化流,将之前使用 ObjectOutputStream 序列化的原始数据恢复为对象
构造方法
public ObjectInputStream(InputStream in) :创建一个指定 InputStream 的 ObjectInputStream
读取对象方法
- readObject()
1 | public static void main(String[] args) throws Exception { |
注意事项
对于 JVM 可以 反序列化 对象,它必须是能够找到 class 文件的类。
如果找不到该类的 class 文件,则抛出一个 ClassNotFoundException 异常