fastjson和jackson的简单对比

来源:互联网 发布:微信假红包软件 编辑:程序博客网 时间:2024/06/03 19:25
中午吃完饭无聊,做了个fastjson和jackson的简单对比。fastjson是阿里做的国有开源Java工具包,jackson是spring mvc内置的json转换工具,孰强孰弱呢?结果吓我一跳!后面三张图,分别是1000条数据、5000条和1W条!

注:年轻时写着玩儿的,代码逻辑混乱,有严重bug。大家图个乐好了。
标签: fastjson Jackson

代码片段(6)[全屏查看所有代码]

1. [代码]主测试程序     

?
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
publicclass JsonParseTest {
 
    publicstatic void main(String[] args) throwsJsonProcessingException {
        Monitoring.begin();
        List<Corp> list = Lists.newArrayList();
        for(inti = 0; i < 1000; i++) {
            list.add(fullObject(Corp.class));
        }
        Monitoring.end("生成数据");
 
        Monitoring.begin();
        jackson(list);
        Monitoring.end("Jackson");
 
        Monitoring.begin();
        fastjson(list);
        Monitoring.end("fastjson");
 
    }
 
    publicstatic void fastjson(List<Corp> list) {
        for(Corp corp : list) {
            String string = JSON.toJSONString(corp);
        }
    }
 
    publicstatic void jackson(List<Corp> list) throwsJsonProcessingException {
        for(Corp corp : list) {
            String string = newObjectMapper().writeValueAsString(corp);
        }
    }
 
    /**
     * 填充一个对象(一般用于测试)
     */
    publicstatic <T> T fullObject(Class<T> cl) {
        T t = null;
        try{
            t = cl.newInstance();
            Method methods[] = cl.getMethods();
            for(Method method : methods) {
                // 如果是set方法,进行随机数据的填充
                if(method.getName().indexOf("set") == 0) {
                    Class param = method.getParameterTypes()[0];
                    if(param.equals(String.class)) {
                        method.invoke(t, randomCodes(5));
                    }elseif (param.equals(Short.class)) {
                        method.invoke(t, (short)newRandom().nextInt(5));
                    }elseif (param.equals(Float.class)) {
                        method.invoke(t,newRandom().nextFloat());
                    }elseif (param.equals(Double.class)) {
                        method.invoke(t,newRandom().nextDouble());
                    }elseif (param.equals(Integer.class)) {
                        method.invoke(t,newRandom().nextInt(10));
                    }elseif (param.equals(Long.class)) {
                        method.invoke(t,newRandom().nextLong());
                    }elseif (param.equals(Date.class)) {
                        method.invoke(t,newDate());
                    }elseif (param.equals(Timestamp.class)) {
                        method.invoke(t,newTimestamp(System.currentTimeMillis()));
                    }elseif (param.equals(java.sql.Date.class)) {
                        method.invoke(t,newjava.sql.Date(System.currentTimeMillis()));
                    }
                }
            }
        }catch(InstantiationException e) {
            e.printStackTrace();
        }catch(IllegalAccessException e) {
            e.printStackTrace();
        }catch(IllegalArgumentException e) {
            e.printStackTrace();
        }catch(InvocationTargetException e) {
            e.printStackTrace();
        }
        returnt;
    }
}

2. [代码]Corp类     

?
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
46
47
48
49
50
51
52
53
54
55
publicclass Corp {
    privateLong uid;
    privateInteger corpGrade;
    privateInteger cityId;
    privateString name;
    privateString EName;
    privateString description;
    privateString zipCode;
    privateString tel;
    privateString fax;
    privateString EMail;
    privateInteger isEmailOpen;
    privateInteger EMailChecked;
    privateTimestamp regDateOnGov;
    privateString backroll;
    privateString address;
    privateString webStoreUrl;
    privateInteger isNew;
    privateInteger credit;
    privateInteger activeDegrees;
    privateInteger hits;
    privateInteger isHitsRecord;
    privateTimestamp regTimeOnZfa;
    privateInteger corpType;
    privateInteger corpMajorcategoryId;
    privateInteger businessRoleId;
    privateString keyword;
    privateInteger developState;
    privateString isAlert;
    privateInteger advMemState;
    privateInteger advStockState;
    privateInteger allianceState;
    privateTimestamp lastUpdateTime;
    privateInteger corpMajorcategoryId1;
    privateString keyword1;
    privateLong certificatePic;
    privateInteger isUpdateCharter;
    privateInteger currcount;
    privateInteger curronsale;
    privateInteger curronhot;
    privateInteger currniccount;
    privateInteger currniconsale;
    privateInteger currniconhot;
    privateString buyProducts;
    privateInteger isOpenShop;
    privateInteger state;
    privateString mainProduct;
    privateString advBrandIds;
    privateString feature;
    privateInteger category;
    privateInteger contactFlag;
    privateString fastPassage;
     
    //省略getter、setter方法
}

3. [代码]小的监控管理类     

?
1
2
3
4
5
6
7
8
9
10
11
12
publicclass Monitoring {
    privatestatic ThreadLocal<Long> begin = newThreadLocal<Long>();
 
    publicstatic void begin() {
        begin.set(System.currentTimeMillis());
    }
 
    publicstatic void end(String name) {
        doubletime = (System.currentTimeMillis() - begin.get()) / 1000.0;
        System.out.println(name + "所用时间(秒):"+ time);
    }
}

4. [图片] 1000.png    

5. [图片] 5000.png    

6. [图片] 10000.png    

0 0