Java: запись объекта в файл без java.lang.StackOverflowError

Я хочу записать большое количество данных в файл. данные содержатся в объекте. объект реализован как сериализуемый. Дело в том, что когда я пытаюсь записать его в файл с помощью writeObject ObjectOutputStream, он выдает StackOverflowError, потому что размер объекта большой.

Мне нужно только сохранить объект, чтобы я мог открыть и использовать его снова, изменить некоторые значения и снова сохранить на диск.

Объектный файл представляет собой NeuralNetwork, созданный с помощью платформы Neuroph, поэтому мне не нравится заглядывать в его большой код, выбирать данные один за другим и сериализовать материал.

Пожалуйста, может кто-нибудь предложить способ нарезать объект (или какой-то эффект буферизации) и хотя бы сохранить. я думаю, что такого рода вещи сделают свое дело.

Спасибо. :)


person Deamonpog    schedule 30.12.2011    source источник
comment
Попробуйте вариант -Xss JVM.   -  person fge    schedule 31.12.2011
comment
Спасибо всем за ответы, я увеличил размер стека, и это немного помогло. но все равно иногда не получается. я обнаружил, что размер файла значительно увеличивается, когда я увеличиваю количество узлов в уровне, а не когда я добавляю новые уровни. может быть какая-то проблема с нейрофилом. в любом случае я собираюсь начать это с Matlab. Спасибо вам всем.. :)   -  person Deamonpog    schedule 17.03.2012


Ответы (2)


Можете ли вы подумать об увеличении размера стека (-Xss2m или около того), поскольку, возможно, простое увеличение стека позволит вам это сделать?

Помимо этого, на самом деле нет способа разрезать граф объектов для сериализации (без понимания объектов).

person Francis Upton IV    schedule 30.12.2011
comment
+1: кроме изменения структуры объекта, это лучший вариант. - person Peter Lawrey; 31.12.2011
comment
Может быть немного неприятно думать, что вы можете превысить размер стека в 1 МБ (по умолчанию в моей системе) с помощью сериализации ... но я преодолел этот предел, сериализовав довольно небольшую древовидную структуру с примерно 160 000 узлов. - person cquezel; 20.03.2013

Это может быть ошибкой в ​​Neuroph, потому что графы могут иметь циклические пути, ведущие к бесконечной рекурсии.

В этом случае вам нужно выполнить (де-)сериализацию самостоятельно. Хоть чему-то научишься. С отражением это относительно легко, так как структура Neuroph невелика.

Есть ли у них достойный форум разработчиков?

person Joop Eggen    schedule 30.12.2011
comment
Любой механизм сериализации/десериализации объектов сможет обрабатывать цикл в графе объектов, поэтому я сомневаюсь, что здесь проблема. И я, конечно, не рекомендую выполнять сериализацию/десериализацию самостоятельно, это требует много работы, чтобы сделать это правильно. - person Francis Upton IV; 31.12.2011