如何在没有stackoverflow错误的情况下序列化大型列表?

时间:2017-06-04 10:30:47

标签: java serialization

我程序中的一个类有一个LinkedList,它通常包含大量元素。序列化此类时,发生一个Stackoverflow错误。我理解这是由于序列化列表中链接的递归方式。所以我想以迭代的方式覆盖此列表的writeObject,但我不知道如何执行此操作。

1 个答案:

答案 0 :(得分:1)

如果其中一个元素是您的Object MyObject,它引用了MyObject,例如:

public class MyObject implements Serializable {
  private MyObject nextObject;
  public void setNextObject(MyObject nextObject) {
    this.nextObject = nextObject;
...
}

如果每个MyObject链接到下一个/上一个MyObject序列化过程将: 开始先写MyObject,然后在写完第一个MyObject之前,它将开始写第二个MyObject,依此类推,直到最后一个对象。

此结构可能导致具有大量元素的序列化堆栈溢出异常。

解决方案是将下一个对象的唯一ID保存为:private int nextObjectId;