做一普通网站需要多少钱,网站项目建设方案,大尺度做爰床视频网站,成都设计公司logo引言
继《Jackson快速入门》之后的高级相关操作。
Jackson提供了一种对于性能要求应用程序操作json更加高效的方式——流式API#xff0c;这种方式开销小#xff0c;性能高#xff0c;因此#xff0c;如果应用程序或者程序逻辑对于性能有一定要求#xff0c;可以使用这种…引言
继《Jackson快速入门》之后的高级相关操作。
Jackson提供了一种对于性能要求应用程序操作json更加高效的方式——流式API这种方式开销小性能高因此如果应用程序或者程序逻辑对于性能有一定要求可以使用这种方式来进行json文件的读写操作而对于一般的读写使用普通的databind api即可。
要点
1、与Java8的“流式”概念不同这种Jackson的这种流式是属于IO流在写出与读入的最后都要进行流的关闭 —— close()。
2、这种流式APIStreaming APIs是一种高性能high-performance读写JSON的方式同时也是一种增量模式incremental mode。
3、Token概念使用流式API的时候每一个JSON 字符串都是一个独立的 token 每一个token都会被增量处理可以理解为一个一个地往上增加类似于垒砖这就是“增量模式”的含义。比如
{name : Morty
}
Token 1 {
Token 2 name
Token 3 Morty
Token 4 }
4、流式API的缺点虽然流式API在性能上有所特长但是通过第三点也可以知道每一个token都是增量处理的也就是说我们必须要小心翼翼地处理每个token这可能会因为粗心导致丢掉必要的token 如 }、] 等而且代码可能并不简洁可读性也不一定好因此不到需要考虑性能的时候一定不要使用这种方式。
示例程序
通过Jackson Streaming APIs写入一个json文件——“user.json”并读出。 Testpublic void testJsonGenerator() throws IOException {JsonFactory factory new JsonFactory();// -----------------JsonGenerator --------------------JsonGenerator gentor factory.createGenerator(new File(user.json), JsonEncoding.UTF8);gentor.writeStartObject(); // {gentor.writeStringField(name, Tomson);gentor.writeNumberField(age, 23);gentor.writeFieldName(messages);gentor.writeStartArray(); // [gentor.writeString(msg1);gentor.writeString(msg2);gentor.writeString(msg3);gentor.writeEndArray(); // ]gentor.writeEndObject(); // }gentor.close();// ------------------JsonParser --------------------JsonParser parser factory.createParser(new File(user.json));while (parser.nextToken() ! JsonToken.END_OBJECT) {String fieldName parser.getCurrentName();if (name.equals(fieldName)) {// current token is name,move to next which is names value.parser.nextToken();System.out.println(parser.getText());// display Tomson}if (age.equals(fieldName)) {parser.nextToken();System.out.println(parser.getIntValue());}if (messages.equals(fieldName)) {parser.nextToken();// messages is array, loop until equals ]while(parser.nextToken() ! JsonToken.END_ARRAY) {System.out.println(parser.getText());}}}parser.close();}
user.json文件内容 程序执行输出结果 总结
Jackson Streaming APIs是一种高性能、增量式json读写工具在需要特殊性能要求的时候才会用到。缺点是代码不简洁易错性高可读性较差可以通过jackson data binding代替。
token的概念每一个json字符串都要被视为token包括表示对象的大括号以及表示数组的中括号。
操作结束需要关流——close()。