Оптимизация fastxml ObjectMapper для списка объектов - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу оптимизировать ObjectMapper для списка. Требование заключается в том, что мне нужно добавить разделитель после каждого элемента списка. Мой текущий код выглядит так:

    StringBuilder strBuilder = new StringBuilder();
    for (Event event : segregatedList) {
        String eventJson = mapper.writeValueAsString(event);
        strBuilder.append("\n");
        strBuilder.append(eventJson);

    }

Это занимает огромное количество времени для длинного списка (~ 10000 событий). Как я могу оптимизировать код для сериализации списка за один раз?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

экземпляры mapper являются поточно-ориентированными, поэтому вы можете разделить mapper.writeValueAsString на параллельное задание. Я думаю, что-то вроде этого может помочь, если вы не беспокоитесь о порядке, в котором они добавлены!

segregatedList.parallelStream().map(event -> mapper.writeValueAsString(event)).collect(Collectors.joining("\n")))

В противном случае, я вижу очень минимальные возможности улучшения здесь. Может быть, вы можете оптимизировать JSON, игнорируя свойства, упомянутые Dark Knight

0 голосов
/ 02 ноября 2018

Существует несколько способов объединения строк в Java.

  1. метод concat () из java.lang.String
  2. Использование оператора +
  3. Использование StringBuffer
  4. Использование StringBuilder

Из моего личного анализа я могу сказать, что + вызов String переводится на новый StringBuilder().append( "" ). Поскольку конструктор StringBuilder (String) выделяет буфер с 16 символами, добавление более 16 символов потребует перераспределения буфера. Наконец, вызовы StringBuffer.toString () создают новый объект String с копией буфера StringBuilder.

Так что, если вы не хотите накладных расходов на синхронизацию StringBuilder стоит лучше других, я бы посоветовал вам использовать StringBuffer здесь. Я вижу, что вы уже используете StringBuilder, поэтому здесь очень мало возможностей для улучшения. Однако вы можете оптимизировать сгенерированный json, игнорируя свойства, которые бесполезны.

...