Строковый буфер - 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
в памяти. В зависимости от того, как структурированы данные, может быть выполнено какое-то действие для каждой прочитанной строки или для каждых нескольких строк.
Еще одна альтернатива - хранить только индекс файла в памяти. Это зависит от того, что вы хотите с этим делать.
Например, если вы хотите отобразить содержимое файла на экране, вы можете открыть файл для произвольного доступа и просмотреть его, записав смещение начала каждой строки в файле. Затем вы можете получить доступ к каждой строке по отдельности, посмотрев на строку в вашем индексе, отыскивая указанное место и читая оттуда.