gpt4 book ai didi

java序列化自定义链表

转载 作者:行者123 更新时间:2023-11-30 07:24:57 25 4
gpt4 key购买 nike

我不想使用提供的 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();
}

}

我怎么想知道,因为我将 header 字段设置为 transient ,当我读取该类时它不会为空吗?如何使其引用 header 节点...

节点也是如此,因为当我读取对象时,下一个和上一个字段是 transient 的,因此字段将为空,如何让它们保持彼此的引用

最佳答案

是的,你是对的,它们将为空。

您必须以与实现写入对象类似的方式实现 readObject:

while(elementsToRead()); // you need to know somehow how long you need to read
{
add(inputStream.readObject());
}

我建议研究 Java 库中列表的读写对象的实现。

为什么不能使用Java链表?如果缺少某些内容,您是否考虑过扩展 linkedLlist?

您基本上可以查看链接列表源代码并了解序列化是如何执行的。

关于java序列化自定义链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36941962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com