2012-07-15 110 views
4

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

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

1024只有1GB – 2012-07-15 10:20:52

+1

你可以用代码标签包装你的代码吗?选择您的所有代码并按CTRL + K – Lopina 2012-07-15 10:22:59

+0

BUFFER的价值是什么? – Michael 2012-07-15 10:25:46

回答

1

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

如果失败也请看看这question

1

你只是在复制字节的时候才来到它。您不需要将任何一个文件处理为Zip文件。只需复制字节。

相关问题