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

猜你喜欢

转载自www.cnblogs.com/tyol/p/10537681.html