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