2016-03-03 88 views
2

我在想如何处理JSON的大文件。TokenBuffer Jackson Json

我不想将它们存储在内存中,所以我不想做JsonNode因为我认为将整个树存储在内存中。

我的另一个想法是使用TokenBuffer。但是,我想知道这是如何工作的。 TokenBuffer也存储整个文档吗?是否有最大限制?我知道这是一个性能最好的做法,但如果我这样做:

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

好像它读取整个文档一次(我不希望)。

回答

1

TokenBuffer的用途是在内存中存储可扩展的JSON令牌数组。它通过首先创建对象,然后根据需要添加新对象Segment来实现。

您猜对了整个文档将被加载到内存中是正确的。唯一的区别是,它不是存储一个存储令牌的字符数组。根据docs的性能优势:

  1. 您可以重新处理JSON标记,而无需从文本表示中重新解析JSON内容。
  2. 如果您想按照它们在缓冲区中追加的顺序遍历所有标记,速度会更快。

TokenBuffer不是内存中磁盘文件的低级缓冲区。

我只想解析文件一次而不用一次加载所有内存,跳过TokenBuffer。从JsonFactoryMappingJsonFactory只需createJsonParser,并获得与nextToken令牌。 Example