不管是好是坏,我一直在使用以下类似的代码,而没有遇到任何问题:
ZipFile aZipFile = new ZipFile(fileName);
InputStream zipInput = aZipFile.getInputStream(name);
int theSize = zipInput.available();
byte[] content = new byte[theSize];
zipInput.read(content, 0, theSize);
我曾经在文件I/O中使用了这个(获取可用空间并直接读取到字节缓冲区的逻辑),并且也与zip文件一起使用没有遇到任何问题。
但最近我遇到一个情况,
zipInput.read(content, 0, theSize);
实际上比可用的theSize
少读了3个字节。由于代码不在循环中检查
zipInput.read(content, 0, theSize);
返回的长度,所以我读取文件时漏掉了最后3个字节,并且后来程序无法正常运行(文件是二进制文件)。奇怪的是,对于不同的zip文件(在我的情况下,有问题的zip条目为867字节),比如1075字节的大型zip文件,代码可以正常工作!
我明白代码的逻辑可能不是“最好”的,但为什么我现在突然遇到了这个问题?
而且如果我立即使用较大的zip条目运行程序,它为什么能够正常运行?
非常欢迎任何输入。
谢谢!