Base64でエンコードされた画像を持つXMLを解析していました。私はイメージを抽出し、XMLの残りの部分を解析したいと思います。私は画像を抽出するために書かれたコードは以下の通りである:私はXMLを解析し、最初の文字列としてimageTextを取得し、このメソッドに文字列を渡すためにJDOMを使用XMLからBase64でエンコードされたデータをファイルに保存する
private void saveFormImage(String imageText) throws IOException {
FileOutputStream fos = null;
try {
Base64 base64=new Base64();
byte decoded[]=base64.decode(imageText.getBytes());
File file = new File(<file loc>);
fos = new FileOutputStream(file);
fos.write(decoded);
} finally {
IOUtils.closeQuietly(fos);
}
}
。次に、Apacheコーデックライブラリを使用してBase64でエンコードされたデータをデコードし、ファイルに保存します。
これを行う最も良い方法ですか?これは非常に速くはありません。それは約2秒で終わります。これを行うためのより高速でメモリ効率の良い方法はありますか?
以下のコメントで更新されました。XMLのデータをOutputStreamに直接パイプし、メモリ内のバッファをデコードする方法はありますか?これは、よりメモリ効率的なやり方ですか? XMLのサイズが最大2.5 MBになると、この問題が発生します。
コードが効率的であるかどうか尋ねていますか? ApacheコーデックライブラリがBase64デコードに最適なオプションである場合、またはXML内のBase64エンコーディングでイメージをシリアル化するソリューション全体が良い解決策である場合は、これらのうち実際に変更できるのはどちらですか? – RonK
Apacheコーデックライブラリ..私は後者に関しては選択肢がありません。 XMLにはすでにイメージが含まれており、取得する必要があります。ヒープ上の文字列としてデータ全体を保持することなく、XMLからOutputstreamにデータをパイプする方法があるのでしょうか? XMLのサイズは約1.5MBです。これは私が心配すべきサイズですか? – sethu
http://stackoverflow.com/a/1687218/14419 –