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的效率有关。

  • 相关阅读:
    self 和 super 关键字
    NSString类
    函数和对象方法的区别
    求两个数是否互质及最大公约数
    TJU Problem 1644 Reverse Text
    TJU Problem 2520 Quicksum
    TJU Problem 2101 Bullseye
    TJU Problem 2548 Celebrity jeopardy
    poj 2586 Y2K Accounting Bug
    poj 2109 Power of Cryptography
  • 原文地址:https://www.cnblogs.com/tyol/p/10537681.html
Copyright © 2011-2022 走看看