我有一个JSON(来自流)。数据巨大。所以我不想反序列化为具体的Java对象。所以我想用Jackson解析器。
JsonFactory factory = new JsonFactory();
JsonParser parser = factory.createJsonParser(stream);
我的目标是从流中获取特定部分(来自对象的特定属性)
{
"array": [],
"map": {},
"bool": "true",
"string": "abcd"
}
例如:我想只获取地图或数组等等
但是我的问题是当我使用inputstream并解析它(获取流的特定部分)时,它(整个JSON)是否会一次性进入内存?
这种(解析)方式和将其反序列化为对象(然后从对象中获取特定成员)之间的区别是什么?
答案 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>
不会读取内存中的所有流。它只在每次需要时读取流。