Java zipfile /字节数组问题

时间:2014-01-29 14:27:48

标签: java arrays byte primitive zipfile

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

//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,但尺寸通常介于1,000,000 - 10,000,000左右,所以这不是问题。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

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

您必须重复调用该函数,直到您阅读了所需的所有数据。

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

答案 1 :(得分:0)

我最终使用IOUtils来解决问题。感谢指针Flavio,Duncan