一、背景
前面发了一篇引起了一些争论(http://my.oschina.net/noahxiao/blog/112759),有人建议alibaba/fastjson不错,我还是继续上次的测试程序加入了alibaba/fastjson的测试实现,来测一测。
二、测试方式
同前一篇(http://my.oschina.net/noahxiao/blog/112759)中的一样,测试一个Map。
为了基于公平考虑所有JSON解析器,byte[]都将转为String传入解析器。输出json时也是先输出String再getBytes转为byte[]。因为alibaba/fastjson有直接处理byte[]的方法,这里并没有使用。
三、比较对象
Java:
- 手写Java(1.6.0_32)
- Common Lang3(3.1)的SerializationUtils
- Gson(2.2.2)
- json-smart(2.0-RC2)
- alibaba/fastjson(1.1.27)
四、测试结果(alibaba/fastjson)
Map大小(10-100)循环10万次
序列化时间比较(y为序列化时间ms)
反序列化时间比较 (y为反序列化时间ms)
序列化时间汇总比较(y为序列化与反序列化总时间ms)
序列化后byte大小比较(由于同类线重合显示为2条线)
Map大小(100-1000)循环1万次
序列化时间比较(y为序列化时间ms)
反序列化时间比较(y为反序列化时间ms)
序列化时间汇总比较(y为序列化与反序列化总时间ms)
序列化后byte大小比较(由于同类线重合显示为2条线)
比较总结
这里只对alibaba/fastjson做一些总结,其它的可以参考前文( http://my.oschina.net/noahxiao/blog/112759)。
Map在小于100时:
fastjson在序列化过程与Gson差不多,Map小于70时优于Gson。
fastjson在反序列化过程表现不错,优于Gson,但还是没有json-smart表现好。
Map在大于100小于1000时:
fastjson在序列化过程出现问题,Map大于300时性能急剧下降,比任何一个序列化都要慢(包括Java)。
fastjson在反序列化过程表现还是很好,并没有随Map的增大而变慢。
总的来说fastjson的反序列化表现很好,但序列化过程并不是太理想,拖了后腿。
在这个测试中fastjson依然没有超过json-smart的性能。
五、测试代码(alibaba/fastjson测试实现)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package
org.noahx.javavsjson;
import
com.alibaba.fastjson.JSON;
import
java.io.UnsupportedEncodingException;
import
java.util.Map;
/**
* Created with IntelliJ IDEA.
* User: noah
* Date: 3/11/13
* Time: 10:13 AM
* To change this template use File | Settings | File Templates.
*/
public
class
FastJsonSerializationTest
implements
SerializationTest {
@Override
public
String getTestName() {
return
"alibaba/fastjson"
;
}
@Override
public
Map<String, Object> testBytes2Map(
byte
[] bytes) {
Map<String, Object> map =
null
;
try
{
map = (Map<String, Object>) JSON.parse(
new
String(bytes,
"UTF-8"
));
}
catch
(UnsupportedEncodingException e) {
e.printStackTrace();
}
return
map;
}
@Override
public
byte
[] testMap2Bytes(Map<String, Object> map) {
byte
[] bytes =
null
;
try
{
bytes = JSON.toJSONString(map).getBytes(
"UTF-8"
);
}
catch
(UnsupportedEncodingException e) {
e.printStackTrace();
}
return
bytes;
}
}
|
源代码下载:http://sdrv.ms/ZsWomK
P.S.
fastjson在反序列化Map<String,Object>时,value整数大于Integer范围的会转换为BigDecimal。浮点数也会转为BigDecimal。