Java序列化与JSON序列化大比拼2(alibaba/fastjson)

一、背景

前面发了一篇引起了一些争论(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:

  1. 手写Java(1.6.0_32)
  2. Common Lang3(3.1)的SerializationUtils
JSON:
  1. Gson(2.2.2)
  2. json-smart(2.0-RC2)
  3. 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测试实现)

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。

转载于:https://my.oschina.net/noahxiao/blog/112899

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值