从文档中Serializable
:
在序列化和反序列化过程中需要特殊处理的类必须实现具有这些确切签名的特殊方法:
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
private void readObjectNoData()
throws ObjectStreamException;
[...]
该readObject
方法负责从流中读取并恢复类字段。它可以调用in.defaultReadObject
来调用用于恢复对象的非静态和非瞬态字段的默认机制。该defaultReadObject
方法使用流中的信息将保存在流中的对象的字段分配给当前对象中相应命名的字段。这可以处理类已经演变为添加新字段的情况。该方法不需要关注属于其超类或子类的状态。状态是通过将各个字段写入ObjectOutputStream
使用writeObject
方法或使用支持的原始数据类型的方法来保存的DataOutput
。
所以基本上,我认为你想要:
public class MySerializable implements Serializable{
String value;
transient String test = "default";
public MySerializable() {
test = "init";
}
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
in.defaultReadObject();
test = "init";
}
}