Gson 和 FastJson 性能测试

使用版本:

    compile ‘com.google.code.gson:gson:2.7‘

    compile ‘com.alibaba:fastjson:1.2.17‘

评测样板为一个People数组,People对象 中包含一个Food对象引用。各个字符串采用随机数模拟;尽量模拟列表请求数据。


String mString  = "abcdefghijklmnopqrstuvwxyz0123456789";Random mRandom  = new Random();
public List<People> createPeopleList(int n){
        List<People> list   = new ArrayList<>();
        for (int i=0; i< n ; i++){
            list.add(createPeople());
        }

        return list;
    }

    public People createPeople(){
        People people   = new People();
        people.name     = getRandomString();
        people.age      = Math.abs(mRandom.nextInt()) % 100;
        people.food     = createFood();
        return people;
    }

    public Food createFood(){
        Food food   = new Food();
        food.name   = getRandomString();
        food.num    = Math.abs(mRandom.nextInt()) % 10;
        food.price  = Math.abs(mRandom.nextInt()) % 100;
        return food;
    }

    public String getRandomString(){
        int size = Math.abs(mRandom.nextInt()) % 6;
        String str = "";
        int len = mString.length();
        for(int i=0; i< size; i++){
            str += mString.charAt(Math.abs(mRandom.nextInt()) % len);
        }
        return str;
    }

评测Demo:

public String  testToJson(int n){
        mText   = "";
        List list   = createPeopleList(n);
        long startTime      = System.currentTimeMillis();
        Gson gson   = new  Gson();
        long initTime       = System.currentTimeMillis();
        String gsonStr  = gson.toJson(list);
        long parseTime      = System.currentTimeMillis();
        String gsonTime     = "gson to initTime: "+(initTime - startTime) +" parse: "+(parseTime - initTime);

        startTime           = System.currentTimeMillis();
        String fastStr  = JSON.toJSON(list).toString();
        parseTime           = System.currentTimeMillis();
        String fastTime     = "fast to parse: "+(parseTime - startTime);

        mText   = gsonTime + "\n" + fastTime;
//        Log.d("tag", gsonStr);
//        Log.d("tag", fastStr);
        return gsonStr;
    }

    public Object testFromJson(String str){
        List<People> list   = new ArrayList<>();
        long startTime      = System.currentTimeMillis();
        Gson gson   = new  Gson();
        long initTime       = System.currentTimeMillis();
        list                = gson.fromJson(str, list.getClass());
        long parseTime      = System.currentTimeMillis();
        String gsonTime     = "gson from initTime: "+(initTime - startTime) +" parse: "+(parseTime - initTime);

        startTime           = System.currentTimeMillis();
        list                = JSON.parseObject(str, list.getClass());
        parseTime           = System.currentTimeMillis();
        String fastTime     = "fast from parse: "+(parseTime - startTime);

        mText   += "\n"+gsonTime + "\n" + fastTime;
        return list;
    }

评测机型:360 型号1503-M02, 处理器:helio X20 十核处理器, 内存4G, 系统6.0, 内核版本3.18.22+

输出数据:

Size 大小      GSON toJson    FastJson toJson      GSON fromJson      FastJson parseJson    单位(ms)20          25          39              6              3           30          39              6              2            27          40              6              3               200          22          15              12              11            23          16              13              12            22          15              11              12

2000          116          87              43              61            128          83              72              89                         120          85              44               73

20000          610          766              596              666              709          793              525              759             530          910                543              773   

200000          6875          15394            11551              18811              6803          15419            10050              18718              6756          15217            11338              19507            

数据分析:1、Size 为 20 的时候 数据偏大是因为有静态变量等相关的初始化工作,接下来的 200、2000等因为已经初始化了,所以没有相应增加时间。2、生成json字符串的速度,2000个对象以内,fastJson 有优势, 20000个数据以上Gson优势比较大3、解析json字符串的数据, 除了20个样板的极端例子,Gson 的解析性能都有可观的优势。

总结:1、android开放中,按照以往经验解析json样板 不超过2000, 封装json的样板不超过200,选择Gson有一定优势。2、FastJson整体表现不如Gson,但是在特定样板大小中,有更好的性能。3、GitHub上面FastJson更新比Gson更慢4、建议使用Gson5、上述样板存在局限,没有覆盖到很多样例,具体项目中,可以实测之后在选择方案。
时间: 2024-08-14 08:04:23

Gson 和 FastJson 性能测试的相关文章

Gson 与 fastJson 在使用上的差异(fastJson的优点)

一.android 常用的json解析方式 Android 开发上常用的json解析方式有:Gson, fastJson,jackson. 因为jackjson jar包会比较大点(700+k),Gson和fastjson的功能又基本够用,所以一直没正式用过jackjson.自己有用的就是Gson和fastjson 二.基本使用方式 Gson //解成对象 Fromat mFromat = new Gson().fromJson(jsonStringObject, Fromat.class);

各个JSON技术的比较(Jackson,Gson,Fastjson)的对比

JSON技术的调研报告 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包, 包括commons-beanutils.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar, 对于复杂类型的转换,json-lib对于json转换成bean还有缺

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的好用,今天我们为了博客的保质保量,也就不分开写,我们直接拿比较火的Gson和Fast-json来使用,末尾在进行一些分析 Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示 一.各有千秋 两大解析库的东家都是巨头,一个来自于Google官方,一个来自阿里巴巴,我们这

Gson与FastJson比较

一. 简介和优劣 1.Google的Gson Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,但自从在2008年五月公开发布第一版后已被许多公司或用户应用.Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上. 而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象. 类里面只要有get和set方法,Gson完全可以将

Android JSON 解析库的使用 - Gson 和 fast-json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C.C++.C#.Java.JavaScript.Perl.Python等).这些特性使JSON成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率). GSON是由谷歌官方推出的 JSON 与 Java 对象转化的 Java类库 fast-json 阿里推

Gson和Fastjson

1.PersonBean package com.louis.fastjsondemo; /** * Created by Administrator on 2016/2/26. */ public class PersonBean { private int id; private String name; private String address; public int getId() { return id; } public void setId(int id) { this.id

Android JSON、GSON、FastJson的封装与解析

声明: 1.本帖只提供代码,不深入讲解原理.如果读者想要深入了解,那就不要在这个帖子上浪费时间了 2.客户端用的是Google官方的Volley访问服务器,具体了解Volley请戳 这里 3.本帖三种数据解析的DEMO都用到了下面这个Person类,贴出来: 1 public class Person { 2 private String name; 3 private int age; 4 private String address; 5 6 public Person() { 7 8 }

Json解析速度比较-Android API、Gson、Fastjson

IOS现成的API里的json解析速度非常快,这里就不说了,今天对比一下Android里面json的解析库. 首先第一个是Android API里面自带的json解析,其次是谷歌提供的Gson解析库(开源),其次是在网上看到的解析很快速的阿里巴巴分享的Fastjson包.Android自带的json解析大家一定都很熟悉了,这里不介绍了,这里详细说说谷歌提供的另一套解析库Gson: gson的使用方法非常的简单.只需要将需要解析的json字符串和对应的Bean类xing型传递给GSON类的from

Volley 结合GSON或FastJson用法

自定义GSON类 1 public class GsonRequest<T> extends Request<T> { 2 private final Gson mGson = new Gson(); 3 private final Class<T> mClazz; 4 private final Listener<T> mListener; 5 private final Map<String, String> mHeaders; 6 7 pu