List list = new ArrayList();
int j = 0;
U u = null;
while (j<1000000){
u = new U();
u.setAge(j);
u.setName("zhangsan " + j);
u.setNo("" + j);
list.add(u);
j++;
}
运行结果:
ali fastjson
long s = System.currentTimeMillis();
System.out.println("before alibaba:" +s);
String aliJson = com.alibaba.fastjson.JSON.toJSONString(list);
long e = System.currentTimeMillis();
System.out.println("after alibaba:" +e);
System.out.println("diff:" + (e-s));
list = null;
long s3 = System.currentTimeMillis();
List sult = (List) com.alibaba.fastjson.JSONObject.parse(aliJson);
long e3 = System.currentTimeMillis();
System.out.println("反 diff:" + (e3-s3));
gson
long s1 = System.currentTimeMillis();
System.out.println("before Gson:" + s1);
Gson gson = new Gson();
String gsonStr = gson.toJson(list);
long e1 = System.currentTimeMillis();
System.out.println("after Gson:" + e1);
System.out.println("diff:" + (e1-s1));
list = null;
long s4 = System.currentTimeMillis();
List sult2 = gson.fromJson(gsonStr,List.class);
long e4 = System.currentTimeMillis();
System.out.println("反 diff:" + (e4-s4));
测试结果:
数据较少时,gson还是比较快的
当数据多时,【当前测试数据100万】gson 比较慢,而且非常耗内存
比较来说, Gson 比 fastjson 考虑更全面, 对用 URL , UUID, BIT_SET, CALENDAR 等等,都有特定的输出规则.
小数量的调用 Gson 比 fastjson 快一点. (几十毫秒,可以毫不在意.猜测是因为 javassist 生成新的 Wrapper 类导致,因为还要编译的.)
大数量的调用 fastjson 比 Gson 快. (千万级别的.还不太确定为什么会变快, 猜测是 gson 的反射调用,毕竟比不上 fastjson Wrapper 类的真实调用.)
代码可阅读性: fastjson 比 Gson 好很多很多.
fastjson 在要序列化对象的类型的判断上,使用的是 if else ,
Gson 使用的是遍历 TypeAdapterFactory集合,在每个 TypeAdapterFactory 里面做判断.而且使用了 N 多的匿名内部类, 想要一眼看出有哪些 TypeAdapterFactory 的实现都很困难.
如果普通日常使用,推荐使用 fastjson,简单易懂,并且是国内程序员开发,有问题可以较容易的获得支持.
Gson 有对各种类型的属性支持, 如果有特殊类型json化需求可以选择 gson ,并自定义扩充.\
相同点:都是根据JSON数据创建相应的类
不同点:
1.调用方式区别
谷歌:方法都是非静态的,需要先创建对象,再去调用
阿里:方法都是静态的,直接用类调用,不需要创建对象
2.方法区别:
谷歌:fromJson(参数1,参数2)
阿里:JSON.parseXX(参数1,参数2)
具体是parseObject()还是parseArray(),根据需要定
1
2
3
4
5
6
7
8
9
10
11
见Gson解析和阿里解析具体实例:
Gson解析法:http://blog.csdn.net/baidu_37107022/article/details/71192363
阿里解析法:http://blog.csdn.net/baidu_37107022/article/details/71192478