2012-04-10 62 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; 
    } 

的代碼工作正常,但我得到了內存錯誤Java堆空間序列化非常大的對象時。有什麼辦法可以防止這種情況發生?隨着對象的增長,是否可以隨時構建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

它應該寫入對象,因爲它導航的對象被序列化。在重複引用的情況下,它需要記錄結構中的每個對象,但除非你有一個非常大的對象數量,否則這不應該很重要。我懷疑你能做的最簡單的事情是增加最大堆大小。 – 2012-04-10 09:45:34

+0

我們需要一個XML和相關的java文件的例子... – Kartoch 2012-04-10 09:54:26

回答

0

你對類路徑XPP3庫(例如在服務器上。)? XStream在Java 5及更低版本上沒有在類路徑上使用Xpp3(或其他類似的庫)使用DOM驅動程序。沒有任何例子,我只能這樣懷疑。