【发布时间】:2011-12-14 01:17:24
【问题描述】:
无论好坏,我一直在使用如下代码,没有任何问题:
ZipFile aZipFile = new ZipFile(fileName);
InputStream zipInput = aZipFile.getInputStream(name);
int theSize = zipInput.available();
byte[] content = new byte[theSize];
zipInput.read(content, 0, theSize);
我用过(这个逻辑是获取可用大小并直接读取到字节缓冲区)
对于File I/O 没有任何问题,我也将它与 zip 文件一起使用。
但最近我遇到了一个案例,zipInput.read(content, 0, theSize); 实际上比可用的theSize 少了 3 个字节。
由于代码不在循环中检查zipInput.read(content, 0, theSize); 返回的长度,我读取了缺少最后 3 个字节的文件
后来程序无法正常运行(文件是二进制文件)。
对于更大尺寸的不同 zip 文件来说已经足够奇怪了,例如1075 字节(在我的情况下,有问题的 zip 条目是 867 字节)代码工作正常!
我知道代码的逻辑可能不是“最好的”,但为什么我现在突然遇到这个问题?
如果我立即使用较大的 zip 条目运行该程序,它会起作用吗?
非常欢迎任何意见
谢谢
【问题讨论】:
标签: java jakarta-ee file-io zip inputstream