6

ZipFile zip、そのZipEntry entry、およびターゲットFile が与えられた場合、unzippedEntryFile最も読みやすい書き込み方法は何entryですかunzippedEntryFile?

Google GuavaApache.Commons.IOを使用して、次のソリューションを思いつきました。

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

ただし、もっと簡単にできることがわかります。

ありがとう、
コンラッド

4

2 に答える 2

3

ネストされた呼び出しがたくさんあることを除けば、コードの何が読めないのかわかりません。これらを分割してローカル変数に割り当てると、コードが長くなります (ただし、私の意見では、もう少し読みやすくなります)。

データを 2 回処理しているようです。1 回目はデータをバイト配列に読み込み、2 回目はファイルにコピーします。私はこれをテストしていませんが、動作し、データ移動の量を半分に削減するはずです:

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

実際、 を実装する独自の小さなクラスを作成できますInputSuppler<InputStream>。Guava ライブラリで見つからなかったことに驚いています。(どうやら、これには他の人も驚いているようです。)

于 2012-10-19T16:44:07.380 に答える
1

これは、 Zip ファイルの操作で考えられるすべてのシナリオを含むクイック リンクです。単純なファイル操作であれば、Sun のチュートリアルがあります。多くのオープンソース API があると確信しています。ここにIO チュートリアルへのリンクがあります。乾杯

于 2012-10-19T16:37:15.057 に答える