Я пытаюсь прочитать один файл из 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
в свою стороннюю библиотеку, библиотека закроет поток, и я больше ничего не смогу сделать, например, справиться с оставшиеся файлы в потоке.