から単一のファイルを読み取り、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、サード パーティのライブラリに渡すだけでは、ライブラリはストリームを閉じ、残りのファイルを処理するなど、それ以上何もできません。ストリーム。