class MyClass implements Serializable {
transient int myTransient;
//Other variables
}
当我恢复此类时,我想手动初始化myTransient
,否则我只想使用默认序列化。
如何在不重写整个序列化机制的情况下将init()
方法注入对象还原过程,因为Externalizable
会让我这样做?
答案 0 :(得分:42)
实施readObject()
方法:
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
in.defaultReadObject();
myTransient = ...;
}
来自javadoc:
在序列化和反序列化过程中需要特殊处理的类必须使用这些精确签名实现特殊方法:
private void readObject(java.io.ObjectInputStream in) 抛出IOException,ClassNotFoundException;
readObject方法负责从流中读取并恢复类字段。它可以调用in.defaultReadObject来调用恢复对象的非静态和非瞬态字段的默认机制。 defaultReadObject方法使用流中的信息来指定流中保存的对象的字段以及当前对象中相应命名的字段。这处理了类在演变为添加新字段时的情况。该方法不需要关注属于其超类或子类的状态。通过使用writeObject方法或使用DataOutput支持的原始数据类型的方法将各个字段写入ObjectOutputStream来保存状态。
另见: