Cra*_*lus 5 java file-io zip inputstream java-ee
无论好坏,我一直在使用以下代码而没有任何问题:
ZipFile aZipFile = new ZipFile(fileName);
InputStream zipInput = aZipFile.getInputStream(name);
int theSize = zipInput.available();
byte[] content = new byte[theSize];
zipInput.read(content, 0, theSize);
Run Code Online (Sandbox Code Playgroud)
我已经使用它(这种获取可用大小并直接读取到字节缓冲区的逻辑)用于FileI/O而没有任何问题,我也将它用于zip文件.
但最近我进入了一个案例,zipInput.read(content, 0, theSize);实际上读取的theSize可用空间少了3个字节.
并且由于代码不在循环中来检查返回的长度, zipInput.read(content, 0, theSize);我读取了最后3个字节丢失的文件,
之后程序无法正常运行(文件是二进制文件).
奇怪的是不同的较大尺寸的zip文件,例如1075字节(在我的情况下,有问题的zip条目是867字节)代码工作正常!
我知道代码的逻辑可能不是"最好的",但为什么我现在突然遇到这个问题?
如果我立即使用更大的zip条目运行程序,它怎么样?
任何意见都非常欢迎
谢谢