我很喜欢这个网站!我的问题如下:
我正在读取一个通过HTTP“PUT”请求从网络传输的zip文件。请求头告诉我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.5Mb(取决于文件的压缩情况,但也可能是其他大小!)。我想知道是否有一种方法可以找出从原始inputStream
读取了多少实际字节?每个压缩条目的ze.getSize()
和ze.getCompressedSize()
都返回-1(即它不知道)。我需要此信息以显示进度栏,以显示已从网络中读取了多少传输的zip文件字节。
有什么建议吗?也许我应该子类化ZipInputStream并尝试找出它从其包装的InputStream中读取了多少字节?
谢谢您提前的帮助!