2012-10-19 13 views
5

はそのZipEntryentryZipFilezipを考えるとunzippedEntryFileentryを書くための最も読みやすい方法が何であるか、FileunzippedEntryFileをターゲット?ZipEntryをFileに書き込む最も読みやすい方法は?

私はGoogle GuavaApache.Commons.IOを使用して、次の解決策を考え出した:

InputSupplier<ByteArrayInputStream> entryInputSupplier = ByteStreams.newInputStreamSupplier(IOUtils.toByteArray(zip.getInputStream(entry))); 
Files.copy(entryInputSupplier, unzippedEntryFile); 

しかし、何かがそれはsimplier行うことができると言われます。ここで

おかげで、
コンラート

答えて

3

私はあなたのコードについての読みではありませんか分からないが、あなたは、ネストされた呼び出しの多くを持っています。これらは分割してローカル変数に割り当てることができます。これによりコードが長くなります(しかし、私の意見では、少し読みやすくなります)。

あなたは2倍のデータを処理しているように見えるん - 一度バイト配列にそれを読み取り、再度ファイルにコピーします。私はこれをテストしていませんが、それは仕事と半分にデータ移動量を削減すべきである:あなたは、実際には、InputSuppler<InputStream>を実装する独自の小さなクラスを作成することができ

final InputStream zipStream = zip.getInputStream(entry); 
InputSupplier<InputStream> supplier = new InputSupplier<InputStream>() { 
    InputStream getInput() { 
     return zipStream; 
    } 
}; 
Files.copy(supplier, unzippedEntryFile); 

。グアバの図書館で見つけられなかったことに私は驚きました。 (どうやら、others have been surprised at this as well。)

+0

「読める」ことで、私も簡潔なもので、私は新しい匿名クラスを作成しないようにしたいと、一般的に、私は以下の呼び出しが同じことを達成するために行うことができると信じていました。 –

1

Zip file operationのためのすべての可能なシナリオがある可能性があります迅速なリンクです。それが単純なファイル操作であれば、ここにはSunのチュートリアルがあります。オープンソースAPIがたくさんあることは確かです。ここにIO tutorialへのリンクがあります。それ以外の乾杯

関連する問題