Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何序列化大型列表而不出现stackoverflow错误?_Java_Serialization - Fatal编程技术网

Java 如何序列化大型列表而不出现stackoverflow错误?

Java 如何序列化大型列表而不出现stackoverflow错误?,java,serialization,Java,Serialization,我程序中的一个类有一个LinkedList,它通常包含大量元素。序列化此类时,发生了一个Stackoverflow错误。我理解这是由于在列表中序列化链接的递归方式造成的。因此,我想以迭代的方式重写此列表的writeObject,但我不知道如何执行此操作。如果其中一个元素是引用MyObject的对象MyObject,例如: public class MyObject implements Serializable { private MyObject nextObject; public

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

如果其中一个元素是引用MyObject的对象MyObject,例如:

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中保存。只需为下一个对象而不是整个对象保存一个关键点