实现对象序列化的基本步骤:
- 实现
Serializable
接口:让需要被序列化的类实现 java.io.Serializable
接口,该接口是一个标记接口,没有任何方法。例如:
import java.io.Serializable;
public class MyClass implements Serializable {
private String data;
public MyClass(String data) {
this.data = data;
}
}
- 创建
ObjectOutputStream
对象:使用 FileOutputStream
等字节输出流创建 ObjectOutputStream
对象,用于将对象写入到输出流中。
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class SerializeExample {
public static void main(String[] args) {
MyClass obj = new MyClass("Hello, Serialization!");
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("myobject.ser"))) {
oos.writeObject(obj);
} catch (Exception e) {
e.printStackTrace();
}
}
}
实现对象反序列化的基本步骤:
- 创建
ObjectInputStream
对象:使用 FileInputStream
等字节输入流创建 ObjectInputStream
对象,用于从输入流中读取对象。
- 调用
readObject
方法:通过 ObjectInputStream
的 readObject
方法读取对象,并将其强制转换为原来的类型。
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class DeserializeExample {
public static void main(String[] args) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("myobject.ser"))) {
MyClass obj = (MyClass) ois.readObject();
System.out.println(obj.data);
} catch (Exception e) {
e.printStackTrace();
}
}
}
关键的接口或类:
Serializable
接口:标记接口,用于标识一个类可以被序列化。实现该接口的类的对象可以被写入到 ObjectOutputStream
中。
ObjectOutputStream
类:用于将对象写入到输出流,提供了 writeObject
方法来序列化对象。
ObjectInputStream
类:用于从输入流读取对象,提供了 readObject
方法来反序列化对象。
Externalizable
接口:该接口继承自 Serializable
,提供了更细粒度的控制对象序列化和反序列化的方法,实现该接口的类需要实现 writeExternal
和 readExternal
方法来自定义序列化和反序列化过程。但相比直接实现 Serializable
接口,使用 Externalizable
接口更复杂,需要更多手动编码。