2016-03-03 86 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