1

xstream を使用して、オブジェクトをファイルとして xml にシリアル化しています。シリアライズしたいオブジェクトは非常に大きく、非常に複雑なツリー構造で構成されています。このために、次のコードを使用しています。

    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)

ありがとう、ジェームズ・フォード

4

1 に答える 1

0

クラスパス (サーバー上など) に Xpp3 ライブラリがありますか? クラスパスに Xpp3 (または他の同様のライブラリ) を使用しない Java 5 以下の XStream は、DOM ドライバーを使用します。例がなければ、私はこれを疑うことしかできません。

于 2012-04-17T13:31:35.197 に答える