java序列化自定义链表
我不想使用提供的LinkedList类,所以我创建了一个自定义链接列表。问题是我担心当我用默认的读/写对象功能序列化这个对象时可能会出现堆栈溢出问题 我在另一篇SO帖子中看到,您必须使用自定义序列化,如下所示:java序列化自定义链表,java,serialization,Java,Serialization,我不想使用提供的LinkedList类,所以我创建了一个自定义链接列表。问题是我担心当我用默认的读/写对象功能序列化这个对象时可能会出现堆栈溢出问题 我在另一篇SO帖子中看到,您必须使用自定义序列化,如下所示: MyClass{ transient Node header; private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(
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字段是瞬态的。字段将为空。我如何使它们保持彼此的引用?是的,你是对的,它们将为空 您必须以与实现写对象类似的方式实现读对象:
while(elementsToRead()); // you need to know somehow how long you need to read
{
add(inputStream.readObject());
}
我建议研究Java库中列表的读写对象的实现
为什么不能使用Java链表?如果缺少某些内容,您是否考虑过扩展LinkedList
您基本上可以查看链表源代码并了解序列化是如何执行的