Java 压缩文件/字节数组问题

标签 java arrays byte primitive zip

我有一个 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 的问题,但大小通常在 1,000,000 - 10,000,000 之间,所以这不是问题。有什么想法吗?

最佳答案

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

您将不得不重复调用该函数,直到您读取了所有需要的数据。

作为引用,请检查 API docs : 他们明确表示“可能会读取较小的数字”。

关于Java 压缩文件/字节数组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21433959/

相关文章:

C# 检测字符串数组中的空字符

C# - 将一串十六进制值转换为十六进制

java - 多个 System.out.print() 和连接之间的区别

java - 是否存在从外部文件恢复属性的递归 Ant 任务?

项目的php索引

java - 在 Java 中查找 2 个字节的值

c# - Byte[] 到 String 到 Byte[] —— 怎么做?

java - 基于不带比较器的成员变量的排序来对对象进行排序

java web start 无法在第二次运行时启动

arrays - 如何在结构数组中找到最大/最小值