Строковый буфер - OutOfMemoryError

У меня есть строковая буферная переменная, которая содержит входные данные, которые я прочитал из файла. В некоторых случаях я получаю входной файл в огромном размере. В этих случаях я получаю OutOfMemoryError.

Вот мой код:

StringBuffer response = new StringBuffer("");
BufferedReader in = new BufferedReader(isr);
String inputLine;
while ((inputLine = in.readLine()) != null)
        response.append(inputLine);
in.close();

Пожалуйста, помогите мне, как решить эту проблему.

3 ответа

Решение

Либо прочитайте ввод в кусках, либо измените -Xmx параметр (максимальный объем памяти) в вашей JVM для большего размера.

Если файл, который вы обрабатываете, огромен, вам может понадобиться найти способ выполнить эту обработку на лету, а не читать весь файл в StringBuffer в памяти. В зависимости от того, как структурированы данные, может быть выполнено какое-то действие для каждой прочитанной строки или для каждых нескольких строк.

Еще одна альтернатива - хранить только индекс файла в памяти. Это зависит от того, что вы хотите с этим делать.

Например, если вы хотите отобразить содержимое файла на экране, вы можете открыть файл для произвольного доступа и просмотреть его, записав смещение начала каждой строки в файле. Затем вы можете получить доступ к каждой строке по отдельности, посмотрев на строку в вашем индексе, отыскивая указанное место и читая оттуда.

Другие вопросы по тегам