我不想使用提供的LinkedList类,所以我编写了一个自定义链表。问题是我担心使用默认的读/写对象函数序列化此对象时可能发生的堆栈溢出问题
我从另一篇SO帖子中看到,你必须使用如下的自定义序列化:
MyClass{
transient Node header;
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
for (Entry e = header.next; e != header; e = e.next)
out.writeObject(e.element);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
}
}
这是节点类
Node{
transient Node next;
transient Node prev;
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
for (Entry e = header.next; e != header; e = e.next)
out.writeObject(e.element);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
}
}
我怎么想知道,因为我把标题字段设置为瞬态,当我读取该类时它不会为空?如何让它引用标题节点...
节点相同,因为当我读取对象时,next和prev字段是瞬态的,字段将为null,如何使它们保持对彼此的引用
答案 0 :(得分:1)
是的,你是对的,他们将是空的。
您必须以与实现写入对象类似的方式实现readObject:
while(elementsToRead()); // you need to know somehow how long you need to read
{
add(inputStream.readObject());
}
我建议在Java库中查看列表的读写对象的实现。
为什么你不能使用Java链表?如果缺少某些内容,您是否考虑过扩展linkedLlist?
您基本上可以查看Linked List源代码并查看序列化的执行方式。