我有一个人为的问题。
我们说我有一个用户链接列表,其中一个用户是"本周用户":
public class UserOfTheWeek implements Serializable {
private UserNode root;
private UserNode userOfTheWeek;
//...
private class UserNode {
String username;
UserNode next;
}
public void saveToFile() {
ObjectOutputStream oos = new ...
oos.writeObject(root);
oos.writeObject(userOfTheWeek);
}
}
root
显然存储了对列表头部的引用,userOfTheWeek
可以指向任何节点。我想保存链表,但会保存userOfTheWeek
制作列表的一部分副本吗?如果列表头部的用户恰好是本周的用户,则可以将整个列表保存两次,更糟糕的是,userOfTheWeek
不会指向root
所指向的列表中的对象{1}}。
有谁知道会发生什么?如果没有,我也愿意接受另一种解决方案。
答案 0 :(得分:1)
我想保存链表,但会保存userOfTheWeek制作列表的一部分副本吗?
没有
如果列表头部的用户恰好是本周的用户,则可以将整个列表保存两次
没有
流知道哪些对象已经序列化到它,并且不会重新序列化它们。请参阅Object Serialization Specification #1.2。同样,该对象仅被反序列化一次。对象图可以完全通用地序列化和恢复,包括循环。
更糟糕的是,userOfTheWeek不会指向root指向的列表中的对象。
您必须单独序列化和反序列化,但不会导致创建新对象,它将引用列表中的对象。