如何以字节数组读取大型zip文件的数据?

8 浏览
0 Comments

如何以字节数组读取大型zip文件的数据?

我正在读取一个较大的zip文件,但我的代码给出了负数组大小异常。

请告诉我如何以字节形式读取长的zip文件数据。

0
0 Comments

如何将一个大的zip文件读取为字节数组?

您的代码至少有一个错误:

file. Length()无法提供您想要的结果。

(实际上,可能根本无法编译)

您想要的应该是file.length()

关于您的问题:

只有当您要读取的文件超过2,147,483,647字节时,才会获得负数的数组大小。

在这种情况下,将int强制转换为负值。

另外:即使您的数组足够大以容纳所有数据,也不能保证is.read(data);将一次性读取所有数据。您需要一个循环。

最后:记得使用try-with-resources关闭InputStream,并使最终变量final。

这个方法如何?:

private static byte[] loadFileAsByteArray(final String path) throws IOException {
    final File file = new File(path);
    try (final InputStream is = new FileInputStream(file)) {
        final byte[]  data = new byte[(int) file.length()]; // Cast -> -ve Array-Size?
        int           off  = 0;
        int           len;
        while (-1 != (len = is.read(data, off, data.length - off))) {
            off   +=  len;
        }
        return  data;
    }
}

0