[英]java serialize a custom linked list
我不想使用提供的 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 我如何让它们保持对彼此的引用
是的,你是对的,它们将为空。
您必须以与实现 write 对象类似的方式实现 readObject:
while(elementsToRead()); // you need to know somehow how long you need to read
{
add(inputStream.readObject());
}
我建议研究 Java 库中列表的读写对象的实现。
为什么不能使用Java链表? 如果缺少某些东西,您是否考虑过扩展linkedLlist?
您基本上可以查看链接列表源代码并查看序列化是如何执行的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.