Люблю этот сайт! Моя проблема заключается в следующем:
Я читаю zip-файл, поступающий по сети из HTTP-запроса «PUT». Заголовок запроса говорит мне, что Content-Length (скажем) 1Mb. Следующий код создает ZipInputStream и сохраняет содержимое zip в файлы в текущем каталоге:
ZipInputStream zis = new ZipInputStream(inputStream);
ZipEntry ze;
long totalBytesRead = 0;
while ((ze = zis.getNextEntry()) != null) {
BufferedOutputStream outStream = new BufferedOutputStream(new FileOutputStream(ze.getName()));
byte[] buffer = new byte[4096];
int i;
while ((i = zis.read(buffer)) != -1) {
totalBytesRead+=i;
outStream.write(buffer,0,i);
}
outStream.close();
}
inputStream.close();
Когда все сказано и сделано, totalBytesRead
равен примерно 1,5 МБ (в зависимости от сжатия файлов, может быть что угодно!). Я хотел бы знать, есть ли способ узнать, сколько фактических байтов было прочитано из оригинала inputStream
? И ze.getSize()
, и ze.getCompressedSize()
возвращают -1 для каждой заархивированной записи (т.е. она не знает). Мне нужна эта информация для индикатора выполнения, чтобы показать, сколько байтов переданного zip-файла было считано из сети.
Предложения? Должен ли я, возможно, создать подкласс ZipInputStream и попытаться выяснить, сколько байтов он читает из упакованного InputStream?
Заранее спасибо!