FileUtils.readFileToByteArray, выбрасывающий java.lang.OutOfMemoryError: ошибка пространства кучи Java
-
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();