转换Zip文件的字节流时出现OOM问题

时间:2014-07-23 13:47:16

标签: java io zip

我在将Zip文件转换为字节流时遇到异常。文件大小为:80 MB

代码:

 File zipFile = new File("abc.zip");
 byte[] zipbyte = new byte[(int) zipFile.length()];    //Line #: 107
FileInputStream fileInputStream = new FileInputStream(zipFile);
fileInputStream.read(zipbyte);

return zipbyte;

例外:

Exception: java.lang.OutOfMemoryError: Java heap space
    at com.sample.ZipUtil.doZip(ZipUtil.java:107)

2 个答案:

答案 0 :(得分:0)

您正试图保留长度为80mb的内存字节数组。这是您问题的核心。你应该使用流,比如这样:

try (InputStream is = new FileInputStream(zipFile); 
     ZipOutputStream zos = new ZipOutputStream(...)) {
     (...)
    IOUtils.copy(is, zos);
     (...)
}

答案 1 :(得分:0)

您没有足够的可用内存来实现zipFile.length()长度的数组。

如果您没有对读取zip文件的方式进行任何重大更改,则应使用JVM选项增加堆空间内存:-XmxX。例如-Xmx1G1G代表1GB)。