当前位置: 首页 > news >正文

营销型网站四大功能河北路泰建设工程有限公司网站

营销型网站四大功能,河北路泰建设工程有限公司网站,刷百度关键词排名优化,湖南高端网站制作公司在上一篇文章中#xff0c;我们学习了如何解析过大的XML文件并将其转换为RxJava流。 这次让我们看一个大的JSON文件。 我们的示例将基于微小的colors.json#xff0c;其中包含将近150种这种格式的记录#xff1a; {aliceblue: [240, 248, 255, 1],antiqu… 在上一篇文章中我们学习了如何解析过大的XML文件并将其转换为RxJava流。 这次让我们看一个大的JSON文件。 我们的示例将基于微小的colors.json其中包含将近150种这种格式的记录 {aliceblue: [240, 248, 255, 1],antiquewhite: [250, 235, 215, 1],aqua: [0, 255, 255, 1],aquamarine: [127, 255, 212, 1],azure: [240, 255, 255, 1],//... 鲜为人知的事实 天蓝色也是一种颜色而Python是蛇。 但是回到RxJava。 这个文件很小但是我们将用它来学习一些原理。 如果遵循它们您将能够加载和连续处理任意大甚至无限长的JSON文件。 首先标准的“ Jackson ”方式类似于JAXB将整个文件加载到内存中并将其映射到Java bean。 但是如果文件的大小为兆字节或千兆字节由于某种原因您发现JSON是存储千兆字节数据的最佳格式……则此技术将无法使用。 幸运的是杰克逊提供了类似于StAX的流模式。 使用Jackson逐个令牌加载JSON文件 使用JSON并将其转换为对象集合的标准ObjectMapper没错。 但是为了避免将所有内容加载到内存中我们必须使用下面的ObjectMapper使用的较低级API。 让我们再次看一下JSON示例 {aliceblue: [240, 248, 255, 1],antiquewhite: [250, 235, 215, 1],//... 从磁盘和内存的角度来看这是一个单维字节流我们可以在逻辑上将其聚合为JSON令牌 START_OBJECT { FIELD_NAME aliceblue START_ARRAY [ VALUE_NUMBER_INT 240 VALUE_NUMBER_INT 248 VALUE_NUMBER_INT 255 VALUE_NUMBER_INT 1 END_ARRAY ] FIELD_NAME antiquewhite START_ARRAY [ VALUE_NUMBER_INT 250 VALUE_NUMBER_INT 235 VALUE_NUMBER_INT 215 VALUE_NUMBER_INT 1 END_ARRAY ] ... 你明白了。 如果您熟悉编译器理论这是编译期间的第一步。 编译器将源代码从字符转换为令牌。 但是如果您了解编译器理论则可能不是为了生存而解析JSON。 无论如何 Jackson库以这种方式工作我们可以在没有透明对象映射的情况下使用它 import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken;JsonParser parser new JsonFactory().createParser(new File(colors.json)); parser.nextToken(); // JsonToken.START_OBJECT; while (parser.nextToken() ! JsonToken.END_OBJECT) {final String name parser.getCurrentName();parser.nextToken(); // JsonToken.START_ARRAY;parser.nextValue();final int red parser.getIntValue();parser.nextValue();final int green parser.getIntValue();parser.nextValue();final int blue parser.getIntValue();parser.nextValue();parser.getIntValue();System.out.println(name : red , green , blue);parser.nextToken(); // JsonToken.END_ARRAY; } parser.close(); …或者如果您摆脱了一些重复并使代码更易于阅读 import lombok.Value;JsonParser parser new JsonFactory().createParser(new File(colors.json)); parser.nextToken(); // JsonToken.START_OBJECT; while (parser.nextToken() ! JsonToken.END_OBJECT) {System.out.println(readColour(parser)); } parser.close();//...private Colour readColour(JsonParser parser) throws IOException {final String name parser.getCurrentName();parser.nextToken(); // JsonToken.START_ARRAY;final Colour colour new Colour(name,readInt(parser),readInt(parser),readInt(parser),readInt(parser));parser.nextToken(); // JsonToken.END_ARRAY;return colour; }private int readInt(JsonParser parser) throws IOException {parser.nextValue();return parser.getIntValue(); }Value class Colour {private final String name;private final int red;private final int green;private final int blue;private final int alpha; } 它与RxJava有什么关系 您可能会猜测–我们可以按需逐块读取此JSON文件。 这使背压机制可以无缝工作 final Flowable colours Flowable.generate(() - parser(new File(colors.json)),this::pullOrComplete,JsonParser::close); 让我解释一下这三个lambda表达式在做什么。 第一个设置JsonParser我们的可变状态将用于产生 拉动 更多项目 private JsonParser parser(File file) throws IOException {final JsonParser parser new JsonFactory().createParser(file);parser.nextToken(); // JsonToken.START_OBJECT;return parser; } 没有什么花哨。 第二个lambda表达式至关重要。 每当订户希望接收更多项目时都会调用它。 如果它要求100个项目则此lambda表达式将被调用100次 private void pullOrComplete(JsonParser parser, EmitterColour emitter) throws IOException {if (parser.nextToken() ! JsonToken.END_OBJECT) {final Colour colour readColour(parser);emitter.onNext(colour);} else {emitter.onComplete();} } 当然如果到达END_OBJECT 关闭整个JSON文件则表明流已结束。 最后一个lambda表达式仅允许清除状态例如通过关闭JsonParser和基础File 。 现在想象一下这个JSON文件的大小为数百GB。 有了FlowableColour我们可以以任意速度安全地使用它而不会冒内存过载的风险。 翻译自: https://www.javacodegeeks.com/2017/09/streaming-large-json-file-jackson-rxjava-faq.html
http://www.huolong8.cn/news/305767/

相关文章:

  • 网站建设与网页设计视频百度快照优化排名怎么做
  • 自己用电脑网站建设深圳网站建设推广公司
  • asp网站伪静态文件下载做网站怎么做起来的
  • 上海网站建设费用北京网站建设公司排行榜
  • 文章写作网站做网站项目时 需求分析的内容
  • 做设计网上揽活哪个网站最好濮阳推广公司
  • 做网站多少钱特惠西宁君博s如何修改管理网站
  • 衡水企业网站网站策划书撰写流程
  • 专业网站建设详细方案做网站的公司不会设计
  • 电子商务网站功能设计与分析用python写一个简单的网页
  • 中国建设银行安徽省分行招聘网站重庆建设工程信息查询
  • 找客户在公司做网站网站建设上海网站建设公司网站
  • 连云港网站建设 连云港网站制作网络系统管理比赛
  • 上海网站快速排名北京网站建设方案系统
  • TP5企业网站开发教程百度云注册城乡规划师2021
  • 一个公司名可以备案多少个网站大专自考报名入口官网
  • 手机上怎么做网站百度云盘登录电脑版
  • 池州网站建设电话有没有做网页的网站
  • 福田皇岗社区网站建设创业做网站
  • 专门做老年旅游的网站深圳网站设计小程序
  • 一个专做窗帘的网站wordpress添加用户注册登录界面
  • 网站托管..传媒大学附近网站建设公司
  • 松岗做网站联系电话o2o平台有哪些行业
  • 旅游网站建设课程设计个人网站开发公司
  • 网站建设合同书 虚拟石家庄新钥匙网站
  • 提高网站订单转化率设计网站网站名称
  • wordpress会员网站点样做网站
  • 织梦安防网站源码鹤壁专业做网站多少钱
  • 网站网站建设考虑要素建设网站多少费用
  • 深圳分销网站设计哪家好什么是网络营销网络营销有哪些内容