Java 如何序列化大型列表而不出现stackoverflow错误?
我程序中的一个类有一个LinkedList,它通常包含大量元素。序列化此类时,发生了一个Stackoverflow错误。我理解这是由于在列表中序列化链接的递归方式造成的。因此,我想以迭代的方式重写此列表的writeObject,但我不知道如何执行此操作。如果其中一个元素是引用MyObject的对象MyObject,例如:Java 如何序列化大型列表而不出现stackoverflow错误?,java,serialization,Java,Serialization,我程序中的一个类有一个LinkedList,它通常包含大量元素。序列化此类时,发生了一个Stackoverflow错误。我理解这是由于在列表中序列化链接的递归方式造成的。因此,我想以迭代的方式重写此列表的writeObject,但我不知道如何执行此操作。如果其中一个元素是引用MyObject的对象MyObject,例如: public class MyObject implements Serializable { private MyObject nextObject; public
public class MyObject implements Serializable {
private MyObject nextObject;
public void setNextObject(MyObject nextObject) {
this.nextObject = nextObject;
...
}
如果每个MyObject链接到下一个/上一个MyObject,则序列化过程将:
开始写入第一个MyObject,在它完成写入第一个MyObject之前,它将开始写入第二个MyObject,依此类推,直到最后一个对象
此结构可能导致序列化stackoverflow异常和大量元素
解决方案是将下一个对象的唯一Id保存为:private int nextObjectId 可能重复ArrayList在不递归的情况下序列化。我假设satck溢出是由于列表元素的结构造成的。我假设您有自己的列表实现,因为LinkedList没有这个问题。我建议您查看LinkedList的源代码,看看他们是如何做到这一点的。(或使用内置LinkedList)我很惊讶有人知道如何编写自定义序列化,但却不知道如何在不递归的情况下迭代链表。我想进一步问一下,在这种情况下,您将如何重写writeObject函数?我遇到了类似的问题,我切换到MyObject int NextoObjectd中保存。只需为下一个对象而不是整个对象保存一个关键点