Потоковый файл Json с несколькими объектами - PullRequest
0 голосов
/ 11 июня 2019

Мне нужно проанализировать большой текстовый файл, который содержит несколько объектов 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-объектов?

Любая помощь здесь приветствуется.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...