目前我正在使用下面的代码在另一个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();
}
答案 0 :(得分:1)
你可以试试FileChannel.transferTo
方法吗?它效率更高。由于这是在操作系统级别完成的,我假设它不应该依赖于Java堆大小。
如果失败,请查看此question。
答案 1 :(得分:1)
当你到达它时,你只是复制字节。您不需要将任一文件作为Zip文件处理。只需复制字节。