Я занимаюсь разработкой приложения, и при первом запуске я ожидаю загрузки большого количества данных в формате JSON (скажем, 10-20 МБ).Все эти данные передаются в одном сетевом запросе (причина в том, что данные генерируются динамически для каждого запроса).Движущийся код выдает исключение OOM при получении данных (in builder.append()
):
public static String readToString(InputStream stream) throws IOException {
BufferedReader in = null;
StringBuilder builder = new StringBuilder();
in = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
char[] buffer = new char[1024];
int read = 0;
while ((read = in.read(buffer, 0, 1024)) > 0) {
builder.append(buffer, 0, read);
}
in.close();
return builder.toString();
}
Что я могу сделать, чтобы избежать этой ошибки?Я думаю о попытке сохранить данные во временный файл и затем обработать его.Но я не уверен, сработает ли это или нет.Другая возможность, по-видимому, состоит в том, чтобы разделить сетевой ввод-вывод на две части: во-первых, приложение получает данные о том, что оно должно загрузить, а во-вторых, оно фактически загружает данные.
Любой совет?