Java zipfile/字节数组问题

Java zipfile/字节数组问题,java,arrays,byte,primitive,zipfile,Java,Arrays,Byte,Primitive,Zipfile,我有一个zip文件,其中包含3个相对较大(数mb)的二进制文件,我需要将其读入缓冲区,以便对其执行一些正则表达式操作 //For entry in zip.getentries loop above long size = entry.getSize(); byte[] bytes = new byte[(int) size]; int numBytesRead = zipFile.getInputStream(entry).read(bytes); if (numBytesRead !

我有一个zip文件,其中包含3个相对较大(数mb)的二进制文件,我需要将其读入缓冲区,以便对其执行一些正则表达式操作

//For entry in zip.getentries loop above

long size = entry.getSize();

byte[] bytes = new byte[(int) size];

int numBytesRead = zipFile.getInputStream(entry).read(bytes);

if (numBytesRead != size) {
     Logger.getLogger(this.getClass()).debug(
                "Read " + numBytesRead + " bytes from zip entry but size of the  
                zip entry is " + size + " bytes");
//continue; - If I do not comment this out the size check fails and nothing happens
}

FileUtils.writeByteArrayToFile(extractFile, bytes);

出于某种原因,我只将大约1/15的数据放入字节数组(在一个示例中,642条记录中有43条)。我最初认为将大小强制转换为int是个问题,但大小通常在1000000到10000000之间,所以这不是问题。有什么想法吗

InputStream.read不需要读取所有数据。它将读取一些数据,数据量在1和数组大小之间变化

在读取所需的所有数据之前,必须反复调用该函数


作为参考,请检查:他们明确表示“可以读取较小的数字”。

我最终使用IOUtils解决了这个问题。感谢Flavio,Duncan

@user1524459的指针,您可能希望尝试使用commons io作为库方法的示例,为您实现这一点。让我们来讨论一下这个问题,但您可能希望检查从long到int的转换是否截断了size的值。见: