package javax.json.stream;import java.io.Closeable;
import java.math.BigDecimal;/*** 目的:流方式读取JSON数据* * <p>以流的方式提供一个向前只读来访问JSON数据。这是最有效读取JSON数据的方法。* {@link javax.json.Json}含有能够解析来自输入源(如:InputStream或Reader)数据的方法。* * <p>以下示例说明一个字符串解析成空的JSON数组:*       JsonParser parser = Json.createParser(new StringReader("[]"));* * <p>{@link JsonParserFactory}创建JsonParser实例:*         JsonParserFactory factory = Json.createParserFactory();*       JsonParser parser1 = factory.createParser(...);*       JsonParser parser2 = factory.createParser(...);* * <p>JsonParser能解析JSON使用的编程模型。这个模型中,客户机能控制线程并调用{@code next()}* 方法来推进解析器处理每个元素的下一个状态。解析器能生成以下事件:*     START_OBJECT,END_OBJECT,START_ARRAY,END_ARRAY,KEY_NAME,*     VALUE_STRING,VALUE_NUMBER,VALUE_TRUE,VALUE_FALSE,VALUE_NULL。*     * <p>例如,对于一个空JSON对象({ })。当解析器第一次调用next(),将生成一个START_OBJECT事件。* 第二次调用next(),将生成一个END_OBJECT事件。如以下代码所示:*      Event event = parser.next(); // START_OBJECT*      event = parser.next();       // END_OBJECT* * <p>例如:以下的JSON示例:*        {*          "firstName": "John", "lastName": "Smith", "age": 25,*         "phoneNumber": [*             { "type": "home", "number": "212 555-1234" },*              { "type": "fax", "number": "646 555-4567" }*            ]*      }* 对应事件:*        {START_OBJECT*          "firstName"KEY_NAME: "John"VALUE_STRING,*          "lastName"KEY_NAME: "Smith"VALUE_STRING, *          "age"KEY_NAME: 25VALUE_NUMBER,*        "phoneNumber"KEY_NAME : *             [START_ARRAY*               {START_OBJECT *                     "type"KEY_NAME: "home"VALUE_STRING, *                       "number"KEY_NAME: "212 555-1234"VALUE_STRING *                  }END_OBJECT,*               {START_OBJECT *                     "type"KEY_NAME: "fax"VALUE_STRING, *                    "number"KEY_NAME: "646 555-4567"VALUE_STRING *                  }END_OBJECT*            ]END_ARRAY*     }END_OBJECT* * <p>使用next()和hasNext()可以迭代解析JSON数据事件,JsonParser对象能够获取当前解析器状态* 的值。例如,以下代码显示怎么获取“John”值:*        Event event = parser.next(); // START_OBJECT*      event = parser.next();       // KEY_NAME*      event = parser.next();       // VALUE_STRING*      parser.getString();          // "John"* @author TCM* @create 2017年11月7日上午11:08:52* @see    javax.json.Json* @see    JsonParserFactory*/
public interface JsonParser extends /*Auto*/Closeable {//事件enum Event {START_ARRAY, //JSON数组的开始,解析器位置在'['之后START_OBJECT,//JSON对象的开始,解析器位置在'{'之后KEY_NAME,    //JSON对象的name值,getString()获取,解析器位置在KEY_NAME之后VALUE_STRING,//JSON对象的value值,getString()获取,解析器位置在VALUE_STRING之后VALUE_NUMBER,//JSON对象或数组的value值,getInt()...获取,位置在VALUE_NUMBER之后VALUE_TRUE,  //JSON对象或数组的value值,位置在VALUE_TRUE之后VALUE_FALSE, //JSON对象或数组的value值,位置在VALUE_FALSE之后VALUE_NULL,  //JSON对象或数组的value值,位置在VALUE_NULL之后END_OBJECT,  //JSON对象的结束,解析器位置在'}'之后END_ARRAY    //JSON数组的结束,解析器位置在']'之后}//解析器是否有一个事件boolean hasNext();//下一个解析状态的事件Event next();String getString();boolean isIntegralNumber();int getInt();long getLong();BigDecimal getBigDecimal();//获取解析器当前状态的位置(输入源中的位置)JsonLocation getLocation();//关闭解析器并释放资源@Overridevoid close();}
package javax.json.stream;import javax.json.JsonArray;
import javax.json.JsonObject;
import java.io.InputStream;
import java.io.Reader;
import java.nio.charset.Charset;
import java.util.Map;/*** 目的:工厂创建JsonParser实例* * <p>工厂创建{@link JsonParser}实例。若果一个工厂实例被配置信息配置,则该配置应用到* 所有创建JsonParser实例中。* * <p>{@link javax.json.Json Json}类也提供创建JsonParser实例的方法,但是* 使用工厂方法创建多个JsonParser实例是最好的,如下所示:*         JsonParserFactory factory = Json.createParserFactory();*       JsonParser parser1 = factory.createParser(...);*       JsonParser parser2 = factory.createParser(...);* * <p>该类所有的方法都是线程安全的,使用在多并发线程。* @author TCM* @create 2017年11月7日下午1:56:17*/
public interface JsonParserFactory {JsonParser createParser(Reader reader);JsonParser createParser(InputStream in);JsonParser createParser(InputStream in, Charset charset);JsonParser createParser(JsonObject obj);JsonParser createParser(JsonArray array);//获取配置属性的mapMap<String, ?> getConfigInUse();}
package javax.json.stream;
/*** 目的:JSON事件的位置信息* * <p>提供一个JSON事件在输入源中的位置信息。{@code JsonLocation}信息用来识别错误的* JSON,或是更高的框架使用这些信息能够知道处理位置。** <p>{@code JsonLocation}提供这些信息是可选的。例如,可以提供行号。另外,输入源中* 没有任何位置信息。例如:JsonParser从输入源解析成JsonArray,所有的方法返回-1。* @author TCM* @create 2017年11月7日上午10:36:24* @see    JsonParser* @see    JsonParsingException*/
public interface JsonLocation {//当前JSON事件在输入源中的行号(若没有行号,则返回-1)long getLineNumber();//当前JSON事件在输入源中的列号(若没有列号,则返回-1)long getColumnNumber();/*** 返回输入源中的流的位置指向。如果输入源是文件或字节流,那么在流中的位置是以字节为指向。* 但是输入源是字符流,那么字符的位置是指向。若没有偏向,则返回-1。* @return 流中的位置偏向(指针位置),没有则返回-1*/long getStreamOffset();}

JsonParser、JsonParserFactory、JsonLocation源码翻译相关推荐

  1. ArrayList源码翻译

    ArrayList源码翻译 简介 属性解读 初始化 添加方法 get方法 set方法 remove方法 contains方法 clone方法 总结 简介 ArrayList 是 java 集合框架中比 ...

  2. three.js源码翻译及案例(五)-GLTFLoader.js

    写在前面 Three中的加载脚本很多,但是核心思想是差不多的,就是文件用文件解析器加载,图片用图片解析器加载,然后json转换为对象,但是由于gltf格式可以自己编辑所以有的源码参考意义不大,glb及 ...

  3. easyui源码翻译1.32--Messager(消息窗口)

    前言 使用$.messager.defaults重写默认值对象.下载该插件翻译源码 消息窗口提供了不同的消息框风格,包含alert(警告框), confirm(确认框), prompt(提示框), p ...

  4. easyui源码翻译1.32--ValidateBox(验证框)

    前言 使用$.fn.validatebox.defaults重写默认值对象.下载该插件翻译源码 validatebox(验证框)的设计目的是为了验证输入的表单字段是否有效.如果用户输入了无效的值,它将 ...

  5. easyui源码翻译1.32--panel(面板)

    前言 昨天发布了表格datagrid的翻译源码 ,easyui的许多插件有依赖关系  比如datagrid 的渲染需要panel.resizable.linkbutton.pagination   今 ...

  6. easyui源码翻译1.32--SearchBox(搜索框)

    前言 使用$.fn.searchbox.defaults重写默认值对象.下载该插件翻译源码 搜索框提示用户需要输入搜索的值.它可以结合一个菜单,允许用户选择不同的搜索类别.在用户按下回车键或点击组件右 ...

  7. easyui源码翻译1.32--Window(窗口)

    前言 扩展自$.fn.panel.defaults.使用$.fn.window.defaults重写默认值对象.下载该插件翻译源码 窗口控件是一个浮动和可拖拽的面板可以用作应用程序窗口.默认情况下,窗 ...

  8. KafkaConsumer源码翻译(中英对照)

    阅读kakka源码时,英语不好,翻译的比较费劲,经常翻译了后面的,忘记了前面说的什么了,等回到前面之后,前面说的是什么,英文又不认识了,在这里做一个记录,慢慢写吧,估计会写的很艰难,目前更新的不多,哎 ...

  9. Unity信号干扰shader(参照崩坏3源码翻译剧情对话效果)

    最近做的项目是二次元,二次元的标杆就是崩坏3,效果真的好 学习崩坏3里面shader最好的方法就是看源码 可以AssetStudio来看资源,因为崩坏3资源是没有加密直接可以看 不过shader源码是 ...

最新文章

  1. Scala隐式转换之隐式类
  2. 入手腾龙SP AF90mm MACRO
  3. 《c语言从入门到精通》看书笔记——第7章 循环控制
  4. C# 面向对象三大特性:封装、继承、多态
  5. Linux下文件的压缩和解压
  6. 学python开发必须要会wsgi么_学python着几个要搞清楚WSGI和uWSGI区别
  7. android select下拉列表_Python+selenium自动化之下拉列表操作(一)
  8. 【NOIP2013】【Luogu1983】车站分级(建图,拓扑排序)
  9. Android学习笔记之Bitmap位图的缩放
  10. Java开发实战经典【Java基础】
  11. STM32 CubeMX 串口通信
  12. iOS13 Scene Delegate详解
  13. 时钟晶振电路EMC设计标准电路详解
  14. C - The Little Girl who Picks Mushrooms HDU - 4422
  15. SPIR-V教程 -- SPIRV变量
  16. 仿京东商城商品分类搜索功能
  17. 安装并使用Ghidra的Eclipse插件的过程
  18. Qt for iOS,Qt 与Objective C混合编程
  19. 如何用 R 绘制动态统计图?
  20. JVM学习之---了解JIT

热门文章

  1. MATLAB官方权威免费视频教程(入门+深度学习)
  2. java 爬虫框架 j_一个分布式java爬虫框架JLiteSpider
  3. 结对-人机对战象棋游戏-设计文档
  4. iframe的src可以引入任何源,但是二者如果想通信的话,必须是同源,如果是非同源,如何解决?
  5. 基于opencv的模板匹配详解
  6. [STM32]详解单片机GPIO输出模式配置-推挽与开漏
  7. 几何代数(Geometric Algebra 也叫克利福德代数 Clifford Algebra)简介
  8. C语言指针之二malloc的用法及详解
  9. 要不要一起爬山?百度大脑EasyDL邀你一起翻越企业AI落地的高山
  10. RS232/485串口转CANbus总线网关模块CAN232/485MB转换器CANCOM的简介