FileUtils.readFileToByteArray, бросающий java.lang.OutOfMemoryError: Ошибка пространства кучи Java - PullRequest
0 голосов
/ 26 октября 2009

Я использую утилиту Apache Commons IO FileUtils для чтения файла в байтовый массив. Файл имеет размер 1,13 гигабайта. Каждый раз, когда вызывается этот метод, я получаю сообщение об ошибке памяти. У меня это работает на 64-разрядном сервере Windows Server 2008 с 8 ГБ памяти. В первый раз, когда я получил эту ошибку, я открыл утилиту Tomcat 6 Configuration и установил начальную память на 1024, а Максимальный пул памяти на 2048. С тех пор я пробовал 3072 и 4096 для Максимального пула памяти. Каждый раз я перезапускал сервис Tomcat, чтобы изменения вступили в силу. Ни одно из этих изменений не исправило эту ошибку. Зачем? Я использую Java 1.6 обновление 14.

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

1 Ответ

2 голосов
/ 02 ноября 2009

Пример кода ниже решил мою проблему. Хотя я не совсем уверен, почему, потому что я установил длину буфера равной длине файла, поэтому я не вижу, как это будет отличаться от readFileToByteArray. Я мог видеть, установил ли я длину буфера в нечто меньшее, чем файл.

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

bis.read(buffer);

fis.close();
...