Как мне прочитать несколько ZipEntries через один InputStream - PullRequest
0 голосов
/ 24 августа 2010

Я должен передать InputStream в качестве параметра в стороннюю библиотеку, которая будет считывать полное содержимое из InputStream и выполнять свою работу.

Моя проблема в том, что некоторые из моих файлов являются файлами Zipс более чем одним ZipEntry.Из того, что я понимаю, можно читать по одному zipEntry за один раз, а затем делать zipInputStream.getNextEntry (), а затем снова читать и так далее.Но сторонняя библиотека не понимает этого и ожидает один InputStream.Все zipEntries zip-файла должны быть доступны как один inputStream.

Пожалуйста, расскажите мне, как это сделать.Я не могу использовать ZipFile, поскольку файл не хранится локально (на другом сервере).Я также не могу прочитать все zipEntries и создать ByteArrayOutputStream или строку, так как файлы могут быть очень большими, и это увеличит использование памяти.

Мне нужен способ, позволяющий одному входному потоку считывать несколько записей zip одного файла zip прозрачно.

заранее спасибо, Prasanna

1 Ответ

0 голосов
/ 24 февраля 2011

Я не эксперт, но я вижу два способа сделать то, что вы просите:

Хотя я бы не назвал это наиболее эффективным способом, довольно надежный метод состоит в том, чтобы записать их все вбуфер, а затем использовать этот буфер для подачи входного потока.Вы можете использовать ByteArrayOutputStream, передать его своим ZipEntries, а затем создать ByteArrayInputStream с тем же buf

В качестве альтернативы SequenceInputStream звучит так, как будто вы делаете то, что вам нужно, но у меня не было возможности посмотретьв это подробнее.

К.Барад

...