【问题标题】:FileUtils.readFileToByteArray throwing java.lang.OutOfMemoryError: Java heap space errorFileUtils.readFileToByteArray 抛出 java.lang.OutOfMemoryError:Java 堆空间错误
【发布时间】:2009-10-26 14:55:38
【问题描述】:

我正在使用 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));

【问题讨论】:

  • 您忘记提及您使用的是哪个 JVM。

标签: exception tomcat6 heap-memory


【解决方案1】:

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

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

bis.read(buffer);

fis.close();

【讨论】:

  • 还解决了我在尝试将文件作为字节输出到浏览器时的内存问题。检查FileUtils.readFileToByteArray,它调用IOUtils.toByteArray,最后它使用InputStream.read字节和BufferedInputStream,但它比它更好地管理内存。
猜你喜欢
  • 2016-01-19
  • 2016-04-10
  • 2020-09-25
  • 2013-03-31
  • 2010-12-08
  • 2015-05-14
相关资源
最近更新 更多