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

  • 相关阅读:
    liunx下mysql数据库使用之三范式,关系模型设计注意项,安装目录结构
    Liunx系统学习一,liunx系统的目录结构及含义
    liunx环境下的mysql数据库配置文件my.conf内的参数含义
    linux下打开chm文件的方法
    java的四舍五入算法
    【JVM】jvm垃圾回收器相关垃圾回收算法
    Linux下MySQL数据库常用基本操作 一
    liunx环境下安装mysql数据库
    加权平均
    Host绑定
  • 原文地址:https://www.cnblogs.com/tyol/p/10537681.html
Copyright © 2011-2022 走看看