如何序列化在java中实现的链表?

Boo*_*ean 2 java serialization

我在网上读到,通过将派生对象声明为瞬态,可以省略序列化.但是,在链表的情况下,链接是对象之间的内存引用.那么,我应该将它转换为数组并存储数组表示吗?

Boz*_*zho 6

以下是Java序列化的方式LinkedList:它获取所有元素并将其ObjectOutputStream与大小一起写入.当然要宣布header参赛作品transient

参见writeObjectreadObject方法LinkedList:

// Write out any hidden serialization magic
s.defaultWriteObject();

// Write out size
s.writeInt(size);

// Write out all elements in the proper order.
for (Entry e = header.next; e != header; e = e.next)
    s.writeObject(e.element);
Run Code Online (Sandbox Code Playgroud)

  • 这样做的原因是"正常"序列化将为每个条目递归地调用另一个`writeObject(e)`,对于长列表,这将给出一个`StackOverflowError`.迭代序列化避免了这种情况. (4认同)