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

西安知名高端网站建设服务企业校园网站建设方案模板

西安知名高端网站建设服务企业,校园网站建设方案模板,郑州做网站推广运营商,石家庄核酸机构造假视频来源#xff1a;http://u6.gg/sDMab前言每次都在网上看到别人说什么某某库性能是如何如何的好#xff0c;碾压其他的库。但是百闻不如一见#xff0c;只有自己亲手测试过的才是最值得相信的#xff0c;本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能。JSON不管是在… 来源http://u6.gg/sDMab前言每次都在网上看到别人说什么某某库性能是如何如何的好碾压其他的库。但是百闻不如一见只有自己亲手测试过的才是最值得相信的本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能。JSON不管是在Web开发还是服务器开发中是相当常见的数据传输格式一般情况我们对于JSON解析构造的性能并不需要过于关心除非是在性能要求比较高的系统。目前对于Java开源的JSON类库有很多种下面我们取4个常用的JSON库进行性能测试对比 同时根据测试结果分析如果根据实际应用场景选择最合适的JSON库。这4个JSON类库分别为GsonFastJsonJacksonJson-lib。一、简单介绍选择一个合适的JSON库要从多个方面进行考虑字符串解析成JSON性能字符串解析成JavaBean性能JavaBean构造JSON性能集合构造JSON性能易用性先简单介绍下四个类库的身份背景1.1 Gson项目地址https://github.com/google/gsonGson是目前功能最全的Json解析神器Gson当初是为因应Google公司内部需求而由Google自行研发而来但自从在2008年五月公开发布第一版后已被许多公司或用户应用。 Gson的应用主要为toJson与fromJson两个转换函数无依赖不需要例外额外的jar能够直接跑在JDK上。 在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。 类里面只要有get和set方法Gson完全可以实现复杂类型的json到bean或bean到json的转换是JSON解析的神器。1.2 FastJson项目地址https://github.com/alibaba/fastjsonFastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。无依赖不需要例外额外的jar能够直接跑在JDK上。 FastJson在复杂类型的Bean转换Json上会出现一些问题可能会出现引用的类型导致Json转换出错需要制定引用。 FastJson采用独创的算法将parse的速度提升到极致超过所有json库。1.3 Jackson项目地址https://github.com/FasterXML/jacksonJackson是当前用的比较广泛的用来序列化和反序列化json的Java开源框架。Jackson社区相对比较活跃更新速度也比较快 从Github中的统计来看Jackson是最流行的json解析器之一Spring MVC的默认json解析器便是Jackson。Jackson优点很多Jackson 所依赖的jar包较少简单易用。与其他 Java 的 json 的框架 Gson 等相比Jackson 解析大的 json 文件速度比较快。Jackson 运行时占用内存比较低性能比较好Jackson 有灵活的 API可以很容易进行扩展和定制。目前最新版本是2.9.4Jackson 的核心模块由三部分组成jackson-core 核心包提供基于”流模式”解析的相关 API它包括 JsonPaser 和 JsonGenerator。Jackson 内部实现正是通过高性能的流模式 API 的 JsonGenerator 和 JsonParser 来生成和解析 json。jackson-annotations 注解包提供标准注解功能jackson-databind 数据绑定包提供基于”对象绑定” 解析的相关 API ObjectMapper 和”树模型” 解析的相关 APIJsonNode基于”对象绑定” 解析的 API 和”树模型”解析的 API 依赖基于”流模式”解析的 API。为什么Jackson的介绍这么长啊因为它也是本人的最爱。1.4 Json-lib项目地址http://json-lib.sourceforge.net/index.htmljson-lib最开始的也是应用最广泛的json解析工具json-lib 不好的地方确实是依赖于很多第三方包对于复杂类型的转换json-lib对于json转换成bean还有缺陷 比如一个类里面会出现另一个类的list或者map集合json-lib从json到bean的转换就会出现问题。json-lib在功能和性能上面都不能满足现在互联网化的需求。二、编写性能测试接下来开始编写这四个库的性能测试代码。2.1 添加maven依赖当然首先是添加四个库的maven依赖公平起见我全部使用它们最新的版本!-- Json libs-- dependencygroupIdnet.sf.json-lib/groupIdartifactIdjson-lib/artifactIdversion2.4/versionclassifierjdk15/classifier /dependency dependencygroupIdcom.google.code.gson/groupIdartifactIdgson/artifactIdversion2.8.2/version /dependency dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion1.2.46/version /dependency dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.9.4/version /dependency dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion2.9.4/version /dependency 2.2 四个库的工具类FastJsonUtil.javapublic class FastJsonUtil {public static String bean2Json(Object obj) {return JSON.toJSONString(obj);}public static T T json2Bean(String jsonStr, ClassT objClass) {return JSON.parseObject(jsonStr, objClass);} } GsonUtil.javapublic class GsonUtil {private static Gson gson new GsonBuilder().create();public static String bean2Json(Object obj) {return gson.toJson(obj);}public static T T json2Bean(String jsonStr, ClassT objClass) {return gson.fromJson(jsonStr, objClass);}public static String jsonFormatter(String uglyJsonStr) {Gson gson new GsonBuilder().setPrettyPrinting().create();JsonParser jp new JsonParser();JsonElement je jp.parse(uglyJsonStr);return gson.toJson(je);} } JacksonUtil.javapublic class JacksonUtil {private static ObjectMapper mapper new ObjectMapper();public static String bean2Json(Object obj) {try {return mapper.writeValueAsString(obj);} catch (JsonProcessingException e) {e.printStackTrace();return null;}}public static T T json2Bean(String jsonStr, ClassT objClass) {try {return mapper.readValue(jsonStr, objClass);} catch (IOException e) {e.printStackTrace();return null;}} } JsonLibUtil.javapublic class JsonLibUtil {public static String bean2Json(Object obj) {JSONObject jsonObject JSONObject.fromObject(obj);return jsonObject.toString();}SuppressWarnings(unchecked)public static T T json2Bean(String jsonStr, ClassT objClass) {return (T) JSONObject.toBean(JSONObject.fromObject(jsonStr), objClass);} } 2.3 准备Model类这里我写一个简单的Person类同时属性有Date、List、Map和自定义的类FullName最大程度模拟真实场景。public class Person {private String name;private FullName fullName;private int age;private Date birthday;private ListString hobbies;private MapString, String clothes;private ListPerson friends;// getter/setter省略Overridepublic String toString() {StringBuilder str new StringBuilder(Person [name name , fullName fullName , age age , birthday birthday , hobbies hobbies , clothes clothes ]\n);if (friends ! null) {str.append(Friends:\n);for (Person f : friends) {str.append(\t).append(f);}}return str.toString();} } public class FullName {private String firstName;private String middleName;private String lastName;public FullName() {}public FullName(String firstName, String middleName, String lastName) {this.firstName firstName;this.middleName middleName;this.lastName lastName;}// 省略getter和setterOverridepublic String toString() {return [firstName firstName , middleName middleName , lastName lastName ];} } 2.4 JSON序列化性能基准测试BenchmarkMode(Mode.SingleShotTime) OutputTimeUnit(TimeUnit.SECONDS) State(Scope.Benchmark) public class JsonSerializeBenchmark {/*** 序列化次数参数*/Param({1000, 10000, 100000})private int count;private Person p;public static void main(String[] args) throws Exception {Options opt new OptionsBuilder().include(JsonSerializeBenchmark.class.getSimpleName()).forks(1).warmupIterations(0).build();CollectionRunResult results new Runner(opt).run();ResultExporter.exportResult(JSON序列化性能, results, count, 秒);}Benchmarkpublic void JsonLib() {for (int i 0; i count; i) {JsonLibUtil.bean2Json(p);}}Benchmarkpublic void Gson() {for (int i 0; i count; i) {GsonUtil.bean2Json(p);}}Benchmarkpublic void FastJson() {for (int i 0; i count; i) {FastJsonUtil.bean2Json(p);}}Benchmarkpublic void Jackson() {for (int i 0; i count; i) {JacksonUtil.bean2Json(p);}}Setuppublic void prepare() {ListPerson friendsnew ArrayListPerson();friends.add(createAPerson(小明,null));friends.add(createAPerson(Tony,null));friends.add(createAPerson(陈小二,null));pcreateAPerson(邵同学,friends);}TearDownpublic void shutdown() {}private Person createAPerson(String name,ListPerson friends) {Person newPersonnew Person();newPerson.setName(name);newPerson.setFullName(new FullName(zjj_first, zjj_middle, zjj_last));newPerson.setAge(24);ListString hobbiesnew ArrayListString();hobbies.add(篮球);hobbies.add(游泳);hobbies.add(coding);newPerson.setHobbies(hobbies);MapString,String clothesnew HashMapString, String();clothes.put(coat, Nike);clothes.put(trousers, adidas);clothes.put(shoes, 安踏);newPerson.setClothes(clothes);newPerson.setFriends(friends);return newPerson;} } 说明一下上面的代码中ResultExporter.exportResult(JSON序列化性能, results, count, 秒); 这个是我自己编写的将性能测试报告数据填充至Echarts图然后导出png图片的方法具体代码我就不贴了参考我的github源码。执行后的结果图从上面的测试结果可以看出序列化次数比较小的时候Gson性能最好当不断增加的时候到了100000Gson明细弱于Jackson和FastJson 这时候FastJson性能是真的牛另外还可以看到不管数量少还是多Jackson一直表现优异。而那个Json-lib简直就是来搞笑的。^_^2.5 JSON反序列化性能基准测试BenchmarkMode(Mode.SingleShotTime) OutputTimeUnit(TimeUnit.SECONDS) State(Scope.Benchmark) public class JsonDeserializeBenchmark {/*** 反序列化次数参数*/Param({1000, 10000, 100000})private int count;private String jsonStr;public static void main(String[] args) throws Exception {Options opt new OptionsBuilder().include(JsonDeserializeBenchmark.class.getSimpleName()).forks(1).warmupIterations(0).build();CollectionRunResult results new Runner(opt).run();ResultExporter.exportResult(JSON反序列化性能, results, count, 秒);}Benchmarkpublic void JsonLib() {for (int i 0; i count; i) {JsonLibUtil.json2Bean(jsonStr, Person.class);}}Benchmarkpublic void Gson() {for (int i 0; i count; i) {GsonUtil.json2Bean(jsonStr, Person.class);}}Benchmarkpublic void FastJson() {for (int i 0; i count; i) {FastJsonUtil.json2Bean(jsonStr, Person.class);}}Benchmarkpublic void Jackson() {for (int i 0; i count; i) {JacksonUtil.json2Bean(jsonStr, Person.class);}}Setuppublic void prepare() {jsonStr{\name\:\同学\,\fullName\:{\firstName\:\zjj_first\,\middleName\:\zjj_middle\,\lastName\:\zjj_last\},\age\:24,\birthday\:null,\hobbies\:[\篮球\,\游泳\,\coding\],\clothes\:{\shoes\:\安踏\,\trousers\:\adidas\,\coat\:\Nike\},\friends\:[{\name\:\小明\,\fullName\:{\firstName\:\xxx_first\,\middleName\:\xxx_middle\,\lastName\:\xxx_last\},\age\:24,\birthday\:null,\hobbies\:[\篮球\,\游泳\,\coding\],\clothes\:{\shoes\:\安踏\,\trousers\:\adidas\,\coat\:\Nike\},\friends\:null},{\name\:\Tony\,\fullName\:{\firstName\:\xxx_first\,\middleName\:\xxx_middle\,\lastName\:\xxx_last\},\age\:24,\birthday\:null,\hobbies\:[\篮球\,\游泳\,\coding\],\clothes\:{\shoes\:\安踏\,\trousers\:\adidas\,\coat\:\Nike\},\friends\:null},{\name\:\陈小二\,\fullName\:{\firstName\:\xxx_first\,\middleName\:\xxx_middle\,\lastName\:\xxx_last\},\age\:24,\birthday\:null,\hobbies\:[\篮球\,\游泳\,\coding\],\clothes\:{\shoes\:\安踏\,\trousers\:\adidas\,\coat\:\Nike\},\friends\:null}]};}TearDownpublic void shutdown() {} } 执行后的结果图从上面的测试结果可以看出反序列化的时候Gson、Jackson和FastJson区别不大性能都很优异而那个Json-lib还是来继续搞笑的。
http://www.pierceye.com/news/228914/

相关文章:

  • 北京模板建站代理好看怎么上传视频网站吗
  • 品牌网站建设小科6a蚪html制作电影网页
  • 环保网站建设维护情况报告北京seo方法
  • 网站建设及使用企业名字查重系统
  • 新乡微网站建设如果做vr参观网站
  • 昆山苏州网站建设地方门户类网站有哪些
  • 网站建设与维护 许宝良 课件企业网站建设费用会计科目
  • react做的网站有哪些帮别人推广赚钱
  • php 深圳 电子商务网站开发苏州餐饮 网站建设
  • 相机拍照的图片怎么做网站呀现在的企业一般用的什么邮箱
  • 深圳自适应网站公司wordpress更改固定链接后
  • 网站报价网站源码下载工具
  • 买个网站域名要多少钱一年网站怎么建设模块
  • 怎么用自助网站设计之家网址
  • 新浪博客发布到wordpress网站seo快速优化技巧
  • php网站换服务器最超值的手机网站建设
  • seo整站优化技术培训wordpress博客编辑器
  • 一家专做灯的网站招聘wordpress 欲思
  • 山西省建设主管部门网站app备案号查询平台官网
  • 百度网站收录链接提交做购物网站的开题报告
  • 迷你主机做网站服务器南京龙媒网络科技有限公司
  • 网站重构给一个网站如何做推广
  • 温州网站推广价钱左侧导航栏网站模板
  • 网站建设朝阳南昌房地产网站建设
  • 大连网络建站公司分析wordpress漫画主题推荐
  • 纪检监察网站建设 讲话制作书签的感受心得
  • 宁波网站建设公司优选亿企邦上海网站快速备案
  • 贵阳有做网站的公司吗微信营销软件免费版
  • 打开网站乱码怎么做河南平台网站建设
  • 物流网站源代码安平县网站建设