FileUtils.readFileToByteArray throwing java.lang.OutOfMemoryError:Java heap space error

StackOverflow https://stackoverflow.com/questions/1625316

  •  06-07-2019
  •  | 
  •  

質問

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));
役に立ちましたか?

解決

以下のコードサンプルは私の問題を解決しました。ただし、バッファの長さをファイルの長さに設定しているため、これがreadFileToByteArrayとどのように異なるかがわからないので、理由は正確にはわかりません。バッファ長をファイルよりも小さい値に設定したかどうかを確認できました。

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

bis.read(buffer);

fis.close();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top