Serializable
接口和Externalizable
接口都用于支持对象的序列化,但它们在实现方式和使用方法上有一些区别。
Serializable
接口
默认序列化机制
Serializable
接口是Java提供的标准序列化机制,当一个类实现了Serializable
接口时,它的所有非transient
成员变量都会自动进行序列化。
简单使用
实现Serializable
接口的类无需实现任何方法,因为它是一个标记接口,Java运行时系统会自动对对象进行序列化和反序列化。
序列化机制不透明
Serializable
接口的序列化机制是不透明的,即无法直接访问序列化的数据或者修改序列化的过程。
Externalizable
接口
手动控制序列化过程
Externalizable
接口提供了更加灵活的序列化机制,允许开发者手动控制对象的序列化和反序列化过程。
需要实现方法
实现Externalizable
接口的类需要实现writeExternal
和readExternal
两个方法,分别用于手动指定对象的序列化和反序列化过程。
下面是一个使用Externalizable
接口实现自定义序列化和反序列化过程的示例:
import java.io.*;
class MyClass implements Externalizable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
// 必须提供默认构造函数,因为在反序列化时需要调用
public MyClass() {
}
public MyClass(String name, int age) {
this.name = name;
this.age = age