zoukankan      html  css  js  c++  java
  • JSON库的使用研究(三)

    怎么选择JSON库?

    从整体测试结果来看,总结如下:

    • 用于序列化、反序列的功能,数量量小,吞吐量不大于10000每秒的,选择gson;
    • 用于解析JSON的,还是用Fastjson吧,虽然听说坑很多。
    • 数据量大的时候,用Fastjson吧;
    • 其他情况Jackson是不错的选择。

    对Gson库的进一步研究

    通过对gson库中gsonbuilder进行一些设置,可优化序列化和反序列化的运行时间。

    要看具体数据情况,下面有个例子,大概比无设置的情况快40%左右

      1 Gson gson= new GsonBuilder()
      2         .serializeNulls() //当字段值为空或null时,依然对该字段进行转换
      3         .setDateFormat(Utils.defaultDatePattern) //时间转化为特定格式
      4         .create();
      5 

    gson库对各个对象、集合的支持都不错(比Fastjson要好),其主要的原理是java的反射机制:

    通过阅读Gson源码可得出以下的结论:
    1)先 获取type获取Java的java.lang.reflect.Constructor,构造器为默认构造器
    2)通过Constructor的newInstance()来创建一个type类型的Java对象。
    3)循环遍历json中的键值对,获取key和value;并且获取key对应的Java中的Field
    4)将value通过Filed的set(Java,value)方法,将value赋值给Javaben对应的Field中去

    这跟使用new的原理有点类似,new一个对象时,使用的递归的方式,gson是循环的方式。总之,Gson用反射解析json ,就是通过反射创建Java对象,循环遍历该对象的Field,并通过Field的set(object,value)方法来对Java object的Field赋值。其实就是简单的反射的应用,Gson只不过是做了简单而有效的封装处理来完成了这其中的操作。

    所以Gson和JVM的效率有关。

  • 相关阅读:
    centOS7 mini配置linux服务器(三) 配置防火墙以及IPtables切换
    Linux的常用基本命令。
    centOS7 mini配置linux服务器(二) 配置IP
    分享Git的一些个人配置
    Firefox中Vimperator插件配置
    Linux下修改键盘默认布局
    Git对于单个文件的分批提交方式的使用
    Linux安装Monaco字体
    浮点与整形在GUI下的相关思考
    2D简单图形相关算法罗列
  • 原文地址:https://www.cnblogs.com/tyol/p/10537681.html
Copyright © 2011-2022 走看看