java serializable接口 - 要初始化瞬态字段,最简单的解决方案是什么




serialization中文 serialization翻译 (2)

实现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来保存状态。

也可以看看:

class MyClass implements Serializable {
  transient int myTransient;
  //Other variables
}

当我恢复这个类时,我想手动初始化myTransient ,否则我只想使用默认的序列化。

如何在不重写整个序列化机制的情况下将init()方法注入到对象恢复过程中,因为看起来像Externalizable会让我这么做?


我得到了同样的错误 -

VM初始化期间发生错误

java.lang.Error:属性init:无法确定当前工作目录。

只需要做'java -version'(你会认为不需要启动虚拟机只是为了回答一个简单的问题,比如'你是什么版本的?')

pwd的目录路径中较高的up元素(斜杠之间)中有空格。 当我创建当前工作目录时,从/向下没有任何空格,'java -version'命令得到了正确的响应。

我总结他们在编程时没有考虑带空格的目录。 但这是版本1.7。 我现在已经加载了版本8,所以希望它已得到纠正。





java serialization