大きな XML ファイルの内容を System.out に出力するプロセスがあります。
この出力がきれいに印刷されている場合 (つまり、複数行)、すべてが機能します。しかし、それが 1 行にある場合、Eclipse は OutOfMemory エラーでクラッシュします。これを防ぐ方法はありますか?
大きな XML ファイルの内容を System.out に出力するプロセスがあります。
この出力がきれいに印刷されている場合 (つまり、複数行)、すべてが機能します。しかし、それが 1 行にある場合、Eclipse は OutOfMemory エラーでクラッシュします。これを防ぐ方法はありますか?
org.w3c.Document
を作成し、シリアライザーを使用して記述していると仮定します。XML文字列を手作業で作成している場合は、ほぼ完全ではないがXMLであるものを生成することがほぼ保証されているので、最初にそれを修正することを強くお勧めします。
とは言うものの、シリアライザーからストリームに書き込む場合(そしてSystem.outがストリームである場合)、文字列に書き込んでそれを印刷するのではなく、ストリームに直接書き込む必要があります(これはStringWriter)。これは、XMLシリアライザーが文字エンコードを適切に処理するのに対し、文字列からストリームへのシリアライザーは処理しない場合があるためです。
現在DOMを構築しておらず、そのためのメモリ要件が心配な場合は、実用的なXMLライブラリ(私が管理している)、特にビルダーパッケージを確認することをお勧めします。軽量ノードを使用し、SAX変換を使用してシリアライザーを介して出力されます。
コメントに応じて編集します。
OK、XStreamでカバーされたシリアライザーがあります。次に、文字列を生成するために呼び出していると想定しXStream.toXML(Object)
、バリアントを呼び出してtoXML(Object, OutputStream)
実際の出力を渡すことをお勧めします。これは、XMLが文字エンコードに非常に敏感であるためです。文字エンコードは、文字列をストリームに変換するときに壊れることがよくあります。
もちろん、これにより、POSTリクエストの作成で問題が発生する可能性があります。特に、OutputStreamを提供しないライブラリを使用している場合はそうです。