2011-12-30 6 views
0

大量のデータをファイルに書きたいと思います。データはオブジェクトに含まれます。オブジェクトは直列化可能として実装されます。 ObjectOutputStreamのwriteObjectを使ってファイルに書き込もうとすると、オブジェクトのサイズが大きいため、StackOverflowErrorが返されます。Java:ファイルへのオブジェクトの書き込みjava.lang.StackOverflowErrorを避ける

オブジェクトを保存して、再度開いて使用したり、値を変更したり、再度ディスクに保存したりする必要があります。

オブジェクトファイルは、Neurophフレームワークで作成されたNeuralNetworkです。そのため、大きなコードを調べてデータを1つずつ選んでシリアル化するのは好きではありません。

誰かがオブジェクトをスライスしたり、少なくともいくつかのバッファリングエフェクトを使用して少なくとも保存する方法を提案できますか?私はその種のことがトリックをするだろうと思う。

ありがとうございます。 :)

+0

JVMの '-Xss'オプションを試してみてください。 – fge

+0

私はすべての返信に感謝し、私はスタックのサイズを増やし、少し助けました。それでも時には失敗する。私は、新しいレベルを追加するときではなく、ノード内のノード数を増やすとファイルサイズが大幅に増加することを発見しました。神経症に何らかの問題があるかもしれません。とにかく私はMatlabでこれを始めるつもりです。 :)ありがとうございました。 – Deamonpog

答えて

2

スタックのサイズを増やすこと(程度)を考えてみてください。

それを超えて、実際には(オブジェクトを理解することなく)直列化のためにオブジェクトグラフを切り取る方法はありません。

+0

+1:オブジェクトの構造の変更以外は、これが最適です。 –

+0

シリアライゼーションでは1Mbのスタックサイズ(私のシステムではデフォルト)を超えることができるとは思えないほど邪魔になるかもしれませんが、私はこの限界を約160,000ノードの「むしろ」小さなツリー構造をシリアライズしました。 – cquezel

0

グラフに循環経路があり、無限再帰につながる可能性があるため、Neurophではエラーが発生する可能性があります。

その場合は、自分で(非)直列化を行う必要があります。少なくともあなたはいくつかを学ぶでしょう。反射は比較的簡単ですが、Neurophフレームワークはリーンです。

彼らはまともな開発者フォーラムを持っていますか?

+1

オブジェクトのシリアライズ/デシリアライゼーションメカニズムは、オブジェクトグラフのループを処理できるため、ここではその問題が疑わしいです。そして、私はシリアライゼーション/デシリアライズを自分でやることをお勧めしません。それはその権利を得るための多くの作業です。 –

関連する問題