我在将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)
答案 0 :(得分:0)
您正试图保留长度为80mb的内存字节数组。这是您问题的核心。你应该使用流,比如这样:
try (InputStream is = new FileInputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(...)) {
(...)
IOUtils.copy(is, zos);
(...)
}
答案 1 :(得分:0)
您没有足够的可用内存来实现zipFile.length()
长度的数组。
如果您没有对读取zip文件的方式进行任何重大更改,则应使用JVM选项增加堆空间内存:-XmxX
。例如-Xmx1G
(1G
代表1GB)。