FileUtils.readFileToByteArray抛出java.lang.OutOfMemoryError:Java堆空间错误

时间:2009-10-26 14:55:39

标签: exception tomcat6 heap-memory

我正在使用Apache Commons IO FileUtils实用程序将文件读​​入字节数组。该文件的大小为1.13千兆字节。每次调用此方法时,都会出现内存不足错误。我在具有8GB内存的Windows Server 2008 64位服务器上运行。我第一次遇到这个错误时,打开了Tomcat 6配置实用程序并将初始内存设置为1024,将最大内存池设置为2048.我已经尝试了最大内存池3072和4096。每次,我重新启动Tomcat服务,以便进行更改。这些更改都没有修复此错误。为什么?我正在使用Java 1.6更新14.

attachment.setData(FileUtils.readFileToByteArray(attachmentFile));

1 个答案:

答案 0 :(得分:2)

下面的代码示例解决了我的问题。我不确定为什么,因为我将缓冲区长度设置为文件的长度,所以我不知道这与readFileToByteArray有什么不同。我可以看到我是否将缓冲区长度设置为小于文件的值。

FileInputStream fis = new FileInputStream(attachmentFile);
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] buffer = new byte[(int)attachmentFile.length()];

bis.read(buffer);

fis.close();