2011-12-30 4 views
0

많은 양의 데이터를 파일에 쓰고 싶습니다. 데이터는 객체에 포함됩니다. 오브젝트는 직렬화 가능으로서 구현됩니다. 문제는 ObjectOutputStream의 writeObject를 사용하여 파일에 쓰려고 할 때 객체의 크기가 크기 때문에 StackOverflowError를 제공한다는 것입니다.Java : java.lang.StackOverflowError를 피하면서 객체를 파일에 기록하기

개체를 저장하고 다시 열어서 값을 변경하고 디스크에 다시 저장하면됩니다.

개체 파일은 Neuroph 프레임 워크로 만든 NeuralNetwork이므로 큰 코드를 살펴보고 하나씩 데이터를 선택하고 항목을 serialize하는 것을 좋아하지 않습니다.

다른 사람이 개체 (또는 일부 버퍼링 효과)를 슬라이스하여 적어도 저장하는 방법을 제안 해주세요. 나는 그런 종류의 일이 트릭을 할 것이라고 생각합니다.

감사합니다. :)

+0

JVM의'-Xss' 옵션을 사용해보십시오. – fge

+0

답장을 보내 주셔서 감사합니다. 스택 크기가 커졌고 조금 도움이되었습니다. 하지만 때때로 실패합니다. 나는 새로운 레벨을 추가 할 때가 아니라 노드의 수를 늘릴 때 파일 크기가 크게 증가한다는 것을 발견했습니다. 신경 쇠약에 문제가있을 수 있습니다. 어쨌든 저는 이것을 Matlab에서 시작하려고합니다. 고맙습니다. :) – Deamonpog

답변

2

스택 크기를 늘리는 것을 고려해 볼 수 있습니까? 스택에 더 많은 용량을 갖게 할 수 있습니까?

그 외에도 실제로 개체를 이해하지 않고 직렬화를 위해 개체 그래프를 잘라내는 방법은 없습니다.

+0

+1 : 개체가 구조화되는 방식을 변경하는 것 외에는 이것이 최선의 선택입니다. –

+0

직렬화를 사용하면 1Mb 스택 크기 (시스템의 기본값)를 초과 할 수 있다고 생각하면 약간 혼란 스러울 수 있지만 약 160,000 개의 노드가있는 "오히려"작은 트리 구조를 직렬화하는이 제한을 exeeded했습니다. – cquezel

0

그래프에 순환 경로가있어 무한 재귀가 발생할 수 있으므로 Neuroph에서 오류가 발생할 수 있습니다.

그런 경우 (직접) 직렬화를 수행해야합니다. 최소한 당신은 약간을 배울 것입니다. Neuroph 프레임 워크가 마른 것처럼 반사가 비교적 쉽습니다.

개발자 포럼이 있습니까?

+1

개체 직렬화/deserialization 메커니즘을 사용하면 개체 그래프에서 루프를 처리 할 수 ​​있으므로 여기에서 그 문제가 의심 스럽습니다. 그리고 필자는 직접 직렬화/병렬 변환을 수행하지 않는 것이 좋습니다. 그렇게하려면 많은 작업이 필요합니다. –