将使用Jackson输入流将所有内容带入内存

时间:2015-10-26 12:58:15

标签: java json jackson

我有一个JSON(来自流)。数据巨大。所以我不想反序列化为具体的Java对象。所以我想用Jackson解析器。

JsonFactory factory = new JsonFactory();
JsonParser  parser  = factory.createJsonParser(stream);

我的目标是从流中获取特定部分(来自对象的特定属性)

{
    "array": [],
    "map": {},
    "bool": "true",
    "string": "abcd"
}

例如:我想只获取地图或数组等等

但是我的问题是当我使用inputstream并解析它(获取流的特定部分)时,它(整个JSON)是否会一次性进入内存?

这种(解析)方式和将其反序列化为对象(然后从对象中获取特定成员)之间的区别是什么?

1 个答案:

答案 0 :(得分:0)

  

Jackson支持的3种主要处理模式中,流处理(也称为增量处理)是处理JSON内容的最有效方式。它具有最低的内存和处理开销,并且通常可以匹配Java平台上可用的许多二进制数据格式的性能(请参阅下面的“性能比较”链接)

根据fasterxml文档(http://wiki.fasterxml.com/JacksonStreamingApi),<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es"><head><title>Center Content</title><link rel="icon" href="http://127.0.0.1/favicon.ico" type="image/x-icon" /><link rel="shortcut icon" href="http://127.0.0.1/favicon.ico" type="image/x-icon" /><meta http-equiv="Content-Script-Type" content="text/javascript" /> <style type="text/css"> html,body{background:#aa0000;color:#fae803;} #todo{ text-align:center; } .central{ text-align:center; background:#4d9999; border:1px solid #000; width:90%; margin:auto; } .logo{ float:left; width:400px; color:#000; } </style> </head><body><div class="logo">ABCDEFGHIJKLMNÑOPQRST</div> <div id="todo"> <div class="central"> HERE INFO CENTERED </div></div> </body></html> 不会读取内存中的所有流。它只在每次需要时读取流。