繁体   English   中英

java序列化自定义链表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM