1

大きな XML ファイルの内容を System.out に出力するプロセスがあります。

この出力がきれいに印刷されている場合 (つまり、複数行)、すべてが機能します。しかし、それが 1 行にある場合、Eclipse は OutOfMemory エラーでクラッシュします。これを防ぐ方法はありますか?

4

3 に答える 3

1

org.w3c.Documentを作成し、シリアライザーを使用して記述していると仮定します。XML文字列を手作業で作成している場合は、ほぼ完全ではないがXMLであるものを生成することがほぼ保証されているので、最初にそれを修正することを強くお勧めします。

とは言うものの、シリアライザーからストリームに書き込む場合(そしてSystem.outがストリームである場合)、文字列に書き込んでそれを印刷するのではなく、ストリームに直接書き込む必要があります(これはStringWriter)。これは、XMLシリアライザーが文字エンコードを適切に処理するのに対し、文字列からストリームへのシリアライザーは処理しない場合があるためです。


現在DOMを構築しておらず、そのためのメモリ要件が心配な場合は、実用的なXMLライブラリ(私が管理している)、特にビルダーパッケージを確認することをお勧めします。軽量ノードを使用し、SAX変換を使用してシリアライザーを介して出力されます。


コメントに応じて編集します。

OK、XStreamでカバーされたシリアライザーがあります。次に、文字列を生成するために呼び出していると想定しXStream.toXML(Object)、バリアントを呼び出してtoXML(Object, OutputStream)実際の出力を渡すことをお勧めします。これは、XMLが文字エンコードに非常に敏感であるためです。文字エンコードは、文字列をストリームに変換するときに壊れることがよくあります。

もちろん、これにより、POSTリクエストの作成で問題が発生する可能性があります。特に、OutputStreamを提供しないライブラリを使用している場合はそうです。

于 2009-12-04T15:50:36.213 に答える