【发布时间】:2009-03-20 17:20:22
【问题描述】:
我有一个由 Node 对象构建的节点树。 它们比我展示的代码更复杂,但只有原始或可序列化的实例成员。
假设每个节点最多可以有 10 个子节点,代码看起来有点像这样。
public class Node implements Serializable{
private static final long serialVersionUID = -848926218090221003L;
private Node _parent;
private boolean _hasParent;
private Node[] _children;
private int _childCount = 0;
public Node(Node parent){
_children = new Node[10];
_parent = parent;
_hasParent = (parent != null);
}
...
//Various accessors etc
}
现在这棵树的构建成本很高,但是一旦完成,我就会将它写入文件:
ObjectOutputStream serializedOuput = new ObjectOutputStream(new FileOutputStream(cacheFile));
serializedOuput.writeObject(tree);
serializedOuput.close();
当我缓存完树后,我会做一些不可逆转的改变,比如修剪掉不需要的树枝。
然后当我接下来需要一个基础树来工作时,我通过读取我的序列化文件来创建一个新的树对象。
问题...
从文件创建树似乎只是创建一个指向旧对象的新对象。换句话说,写入文件后所做的修改也已对新树进行。
如果我重新启动应用程序并尝试读取序列化文件,它会返回 null。
所以我似乎是在序列化对象引用而不是对象本身,有什么想法会出错吗?
【问题讨论】:
标签: java serialization