2012-04-10 3 views
1

xstream을 사용하여 객체를 xml 파일로 직렬화합니다. 직렬화하려는 객체는 매우 커서 매우 복잡한 트리 구조로 구성됩니다.xstream은 힙 공간을 직렬화합니다.

XStream xStream = new XStream(); 

    xStream.omitField(Stat.class, "sources"); 
    String XMLFilename = "XML-" + dateString + ".xml"; 

    FileOutputStream outputStream = null; 

    Writer writer = null; 

    try { 
     outputStream = new FileOutputStream(currentWorkPath+XMLFilename); 
     writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8")); 
     xStream.toXML(ss, writer); 

    } catch (Exception exp) { 
     log.error(null, exp); 
    } finally { 
     writer = null; 
     outputStream = null; 
    } 

코드는 잘 작동하지만 매우 큰 객체를 직렬화 때 메모리 오류 자바 힙 공간이 부족 얻을 :이를 위해 다음 코드를 사용하고 있습니다. 이 문제를 방지 할 수있는 방법이 있습니까? 객체가 커지면서 XML을 즉시 제작할 수 있습니까?

아니면 다른 XML 직렬 라이브러리입니까?

예외 :

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at java.util.HashMap.addEntry(Unknown Source) 
    at java.util.HashMap.put(Unknown Source) 
    at com.thoughtworks.xstream.core.util.ObjectIdDictionary.associateId(ObjectIdDictionary.java:91) 

감사합니다, 제임스 포드

+0

개체가 serilaized 될 때 개체를 탐색 할 때 개체를 작성해야합니다. 반복되는 참조의 경우 구조의 모든 객체를 기록해야하지만 매우 큰 수의 객체가 없으면 중요하지 않습니다. 당신이 할 수있는 가장 간단한 일은 최대 힙 크기를 늘리는 것입니다. –

+0

우리는 XML과 관련 자바 파일의 예제가 필요합니다 ... – Kartoch

답변

0

당신이 클래스 경로에 Xpp3 라이브러리가 있습니까 (예를 서버에서.)을? Classpath에서 Xpp3 (또는 다른 유사한 라이브러리)이없는 Java 5의 XStream은 DOM 드라이버를 사용합니다. 어떤 예도없이 나는 단지 이것을 의심 할 수 있습니다.

관련 문제