2012-03-11 15 views
1

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になると、この問題が発生します。

+0

コードが効率的であるかどうか尋ねていますか? ApacheコーデックライブラリがBase64デコードに最適なオプションである場合、またはXML内のBase64エンコーディングでイメージをシリアル化するソリューション全体が良い解決策である場合は、これらのうち実際に変更できるのはどちらですか? – RonK

+0

Apacheコーデックライブラリ..私は後者に関しては選択肢がありません。 XMLにはすでにイメージが含まれており、取得する必要があります。ヒープ上の文字列としてデータ全体を保持することなく、XMLからOutputstreamにデータをパイプする方法があるのでしょうか? XMLのサイズは約1.5MBです。これは私が心配すべきサイズですか? – sethu

+0

http://stackoverflow.com/a/1687218/14419 –

答えて

2

ドキュメントの残りのXMLについてはどうですか?あなたはそれを捨てたいですか?

yesの場合、STAX(XML用のストリーミングAPI)を見て:あなたは、ドキュメントの残りの部分を解析したい場合は

http://docs.oracle.com/javase/7/docs/api/javax/xml/stream/package-summary.html

これは、Java SE 6

の一部ですまた、カスタムバインディングを使用してJAXBを検討します。

+0

です。他の要素のデータも必要です。 – sethu