から単一のファイルを読み取り、java.util.zip.ZipInputStream
それを にコピーしようとしていますjava.io.ByteArrayOutputStream
(その後、 を作成して、それjava.io.ByteArrayInputStream
をサードパーティのライブラリに渡して、ストリームを閉じてしまいます。ZipInputStream
閉じたくありません) .
ここにはおそらく基本的なものが欠けていますが、ここでは while ループに入ることはありません。
ByteArrayOutputStream streamBuilder = new ByteArrayOutputStream();
int bytesRead;
byte[] tempBuffer = new byte[8192*2];
try {
while ((bytesRead = zipStream.read(tempBuffer)) != -1) {
streamBuilder.write(tempBuffer, 0, bytesRead);
}
} catch (IOException e) {
// ...
}
ストリームをコピーできるようにするために何が欠けていますか?
編集:
ZipInputStream
これはファイルからのものではないことを先に述べておくべきだったので、 ZipFile
. サーブレットを介してアップロードされたファイルからのものです。
また、このコード スニペットに到達する前にgetNextEntry()
、既に を呼び出しています。ZipInputStream
ファイルを別のファイルにInputStream
(OutputStream
上記の方法で)コピーしようとせずZipInputStream
、サード パーティのライブラリに渡すだけでは、ライブラリはストリームを閉じ、残りのファイルを処理するなど、それ以上何もできません。ストリーム。