FileUtils.readFileToByteArray 抛出 java.lang.OutOfMemoryError:Java堆空间错误
-
06-07-2019 - |
题
我正在使用 Apache Commons IO FileUtils 实用程序将文件读入字节数组。该文件大小为 1.13 GB。每次调用此方法时,我都会收到内存不足错误。我在具有 8GB 内存的 Windows Server 2008 64 位服务器上运行它。第一次出现此错误时,我打开 Tomcat 6 配置实用程序并将初始内存设置为 1024,将最大内存池设置为 2048。此后我也尝试了最大内存池的 3072 和 4096。每次,我都会重新启动 Tomcat 服务以使更改生效。这些更改都没有修复此错误。为什么?我正在使用 Java 1.6 更新 14。
attachment.setData(FileUtils.readFileToByteArray(attachmentFile));
解决方案
下面的代码示例解决了我的问题。但我不太确定为什么,因为我将缓冲区长度设置为文件的长度,所以我看不出这与 readFileToByteArray 有什么不同。我可以看看是否将缓冲区长度设置为小于文件的长度。
FileInputStream fis = new FileInputStream(attachmentFile);
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] buffer = new byte[(int)attachmentFile.length()];
bis.read(buffer);
fis.close();
不隶属于 StackOverflow