Android: анализ большого файла JSON
Я создаю приложение для Android, которое должно анализировать Json из файла или URL-адреса в jsonarray и jsonobjects. Проблема в том, что мой json составляет 3,3 МБ, и когда я использую простой код, что-то вроде этого: (не могу получить доступ к моему настоящему коду сейчас, потому что я на работе, скопировал некоторый код из учебника; поэтому в нем могут быть некоторые ошибки)
(при условии, что у меня уже есть мой входной поток контента)
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
String twitterfeed = builder.toString();
}
JSONArray jsonArray = new JSONArray(twittefeed);
Log.i(ParseJSON.class.getName(),
"Number of entries " + jsonArray.length());
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Log.i(ParseJSON.class.getName(), jsonObject.getString("text"));
Когда я запускаю этот код на моем устройстве Android, я получаю ошибку OutOfMemory при разборе строки в jsonArray. Я зарегистрировал некоторые вещи, которые я нашел, что моя общая строка составляет 17 МБ (из 3,3 МБ JSON-файла ?!). Когда я использую небольшой JSON-файл, такой как твиттер или около того, код работает нормально. Когда в моей памяти есть эта строка размером 17 Мб, я не могу разобрать JSON, потому что тогда у меня заканчивается память.
После долгих исследований я обнаружил, что Джексон может быть моим решением, потому что я понял, что можно анализировать входной поток. Это должно помочь, потому что мне не нужна строка 17 Мб в моей памяти; и это не самый эффективный способ, как я догадываюсь ... Но я не могу понять, что это действительно сработает, и не запустил его сам. Кто-нибудь знает об этом действительно будет работать, и где я могу найти учебник?
Я нашел& quot; createJsonParser - общедоступный JsonParser createJsonParser (InputStream in) & quot; и думаю, что это мой путь ... но я не знаю, как реализовать это в моем коде, и не могу найти пример. Кто-нибудь знает, как это работает?