4

目前我正在使用下面的代码将 zip 复制到另一个 zip 中。但是当 zip 文件大小增加时,例如:2GB,程序抛出内存不足错误。我已将 xmx 增加到 1024,仍然 prfoblem 是相同的。是否有任何替代方法处理大文件?

public static void zipFile(File srcFile, File zipFile)
            throws FileNotFoundException, IOException {
        BufferedInputStream origin = null;
        FileOutputStream dest = new FileOutputStream(zipFile);
        ZipOutputStream out = new ZipOutputStream(
                new BufferedOutputStream(dest));
        // out.setMethod(ZipOutputStream.DEFLATED);
        byte data[] = new byte[BUFFER];
        FileInputStream fi = new FileInputStream(srcFile);
        origin = new BufferedInputStream(fi, BUFFER);
        ZipEntry entry = new ZipEntry(srcFile.getName());
        out.putNextEntry(entry);
        int count;
        while ((count = origin.read(data, 0, BUFFER)) != -1) {
            out.write(data, 0, count);
        }
        origin.close();
        out.close();
    }
4

2 回答 2

1

当您开始使用它时,您只是在复制字节。您不需要将任一文件作为 Zip 文件处理。只需复制字节。

于 2012-07-15T10:52:29.697 回答
1

可以试试FileChannel.transferTo方法吗?它更有效率。由于这是在操作系统级别完成的,我假设它不应该依赖于 Java 堆大小。

如果那也失败了,请看一下这个问题

于 2012-07-15T10:28:46.827 回答