【问题标题】:Java : Writing an object to a file avoiding java.lang.StackOverflowErrorJava:将对象写入文件避免 java.lang.StackOverflowError
【发布时间】:2011-12-30 20:44:31
【问题描述】:

我想将一些大量数据写入文件。数据包含在对象中。对象被实现为可序列化的。 问题是当我尝试使用 ObjectOutputStream 的 writeObject 将其写入文件时,它会给出 StackOverflowError,因为对象的大小很大。

我只需要保存对象,以便我可以再次打开和使用它,更改一些值,然后再次保存到磁盘。

目标文件是使用 Neuroph 框架创建的 NeuralNetwork,所以我不喜欢查看它的大代码并一一挑选数据并将其序列化。

请有人建议一种方法来切片对象(或一些缓冲效果)并至少保存。我认为这种事情可以解决问题。

谢谢。 :)

【问题讨论】:

  • 试试JVM的-Xss选项。
  • 感谢大家的回复,我增加了堆栈大小,这有点帮助。但有时它仍然会失败。我发现当我增加 A Level 中的节点数量时文件大小会大大增加,而不是当我添加新级别时。可能是neuroph的问题。无论如何,我将要从 Matlab 开始。谢谢大家.. :)

标签: java serialization object stack-overflow buffering


【解决方案1】:

您是否可以考虑增加堆栈大小(-Xss2m 左右),因为也许只是在堆栈上多一些就可以完成它?

除此之外,实际上并没有一种方法可以分割对象图以进行序列化(不了解对象)。

【讨论】:

  • +1:除了改变对象的结构方式,这是最好的选择。
  • 认为您可以通过序列化超过 1Mb 堆栈大小(我的系统上的默认值)可能有点令人不安......但是我超过了这个限制序列化一个“相当”的小树结构,大约160,000 个节点。
【解决方案2】:

这可能是 Neuroph 中的错误,因为图可能具有循环路径,导致无限递归。

在这种情况下,您需要自己进行(反)序列化。至少你会学到一些。由于 Neuroph 框架很精简,因此反射相对容易。

他们有一个像样的开发者论坛吗?

【讨论】:

  • 任何对象序列化/反序列化机制都能够处理对象图中的循环,所以我怀疑这是这里的问题。我当然不建议自己进行序列化/反序列化,要做到这一点需要做很多工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多