我有一个包含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左右,所以这不是问题。有什么想法吗?
答案 0 :(得分:3)
InputStream.read
不需要读取所有数据。它将读取一些数据,其数量在1和数组大小之间变化。
您必须重复调用该函数,直到您阅读了所需的所有数据。
作为参考,请检查API docs:他们明确说“可以读取较小的数字”。
答案 1 :(得分:0)
我最终使用IOUtils来解决问题。感谢指针Flavio,Duncan