- 实现步骤:
- 定义类实现
Serializable
接口:
- 让需要序列化的类实现
java.io.Serializable
接口。例如:
import java.io.Serializable;
public class MyClass implements Serializable {
private String normalField;
private transient int transientField;
// 构造函数、getter和setter方法等
}
- 自定义序列化策略:
- 在类中定义
writeObject
和readObject
方法。这两个方法必须是私有的,并且签名固定。
writeObject
方法用于定义如何序列化对象,包括处理transient
修饰的变量。例如:
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
out.writeObject(normalField);
// 处理transientField,例如将其值乘以2后写入
out.writeInt(transientField * 2);
}
- `readObject`方法用于定义如何反序列化对象,要与`writeObject`方法的写入顺序和方式对应。例如:
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
normalField = (String) in.readObject();
// 读取处理后的transientField值,再除以2恢复原值
transientField = in.readInt() / 2;
}
- 关键类及方法:
ObjectOutputStream
类:
writeObject(Object obj)
方法:用于将对象写入输出流进行序列化。在自定义writeObject
方法中,我们可以调用ObjectOutputStream
的其他写入方法(如writeInt
等)来处理对象的各个部分,包括transient
修饰的变量。
ObjectInputStream
类:
readObject()
方法:用于从输入流中读取对象进行反序列化。在自定义readObject
方法中,我们使用ObjectInputStream
的读取方法(如readInt
等)按顺序读取数据,恢复对象状态,包括transient
修饰变量的状态。
writeObject
和readObject
方法:
- 这两个自定义方法是实现自定义序列化策略的核心。在类内部定义这两个方法,按照特定规则处理
transient
变量的序列化和反序列化过程。