将zip文件复制到另一个zip文件中

4

目前我正在使用以下代码将zip文件复制到另一个zip文件中。但是当zip文件大小增加到2GB时,程序会抛出内存不足的错误。我已经将xmx增加到1024,但问题仍然存在。是否有其他方法来处理大文件?

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();
    }

1
请将您的代码用代码标签包裹起来,好吗?选择您的所有代码,然后按CTRL+K。 - ioreskovic
2个回答

1

你可以尝试使用FileChannel.transferTo方法吗?这种方式更有效率。由于这是在操作系统层面完成的,我认为它不应该依赖Java堆大小。

如果仍然失败,请看一下这个问题


1

从本质上说,您只是在复制字节。您无需将任何文件处理为Zip文件。只需复制这些字节即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接