Мне нужно проанализировать большой текстовый файл, который содержит несколько объектов json, разделенных символом новой строки. И снова объекты json имеют большой объем и должны быть проанализированы [на основе указанного пути Json] и сохранены в БД.
Для потокового текстового файла я использую Apache Commons LineIterator для чтения построчно.
пример:
LineIterator it = FileUtils.lineIterator(f, "UTF-8");
int i = 0;
while (it.hasNext()) {
readStream(it.nextLine());
}
Для потоковой передачи объекта json я бы предпочел использовать JsonReader из
com.google.gson.stream.JsonReader.
пример:
Gson gson = new GsonBuilder().create();
JSONObject obj = new JSONObject(line);
JSONArray json_array = obj.getJSONArray("objectName");
JsonReader reader2 = new JsonReader(new
StringReader(json_array.toString()));
reader2.beginArray();
while (reader2.hasNext()) {
ObjectPOJO orgTree = gson.fromJson(reader2, ObjectPOJO.class);
.../ Do something with the object
}
reader2.endArray();
reader2.close();
Но проблема здесь в том, что когда я построчно читаю файл, вся строка читается в память, и использование потоковой передачи gson не имеет никакого смысла [потому что строка, которая является объектом json, уже загружена в память].
Использование потоковой передачи файлов с помощью JsonReader, например:
JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
не поможет, потому что размер строки неизвестен, и каждая строка является объектом json.
Кто-нибудь может подсказать, что может быть лучше для потоковой передачи как файловых, так и json-объектов?
Любая помощь здесь приветствуется.
Спасибо