2016-03-03 9 views
2

Мне интересно, что делать с большими файлами JSON.TokenBuffer Jackson Json

Я не хочу хранить их в памяти, поэтому я не хочу делать JsonNode s, потому что Я думаю,, который хранит все дерево в памяти.

Моя другая идея: TokenBuffer. Однако мне интересно, как это работает. Означает ли TokenBuffer весь документ? Максимальный лимит. Я знаю, что это лучшая практика производительности, но если я делаю:

TokenBuffer buff = jParser.readValueAs(TokenBuffer.class); 

Похоже, он читает весь документ сразу (я не хочу).

ответ

1

Целью TokenBuffer является сохранение расширяемого массива жетонов JSON в памяти. Он делает это, создавая сначала объект 1 Segment с объектами 16 JsonToken, а затем добавляя новые Segment объекты по мере необходимости.

Вы правильно знаете, что весь документ будет загружен в память. Единственное отличие состоит в том, что вместо хранения массива символов он хранит маркеры. Преимущества производительности в соответствии с docs:

  1. Вы можете повторно обработать JSON лексемы без повторного разбора содержимого JSON из текстового представления.
  2. Это быстрее, если вы хотите перебрать все токены в том порядке, в котором они были добавлены в буфер.

TokenBuffer не является буфером низкого уровня в файле диска в памяти.

Я хочу только разобрать файл один раз, не загружая его все сразу в память, пропуская TokenBuffer. Просто createJsonParser от JsonFactory или MappingJsonFactory и получите токены с nextToken. Example.