FileUtils.readFileToByteArray, выбрасывающий java.lang.OutOfMemoryError: ошибка пространства кучи Java

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

  •  06-07-2019
  •  | 
  •  

Вопрос

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