加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Gson与FastJson解析性能分析

发布时间:2020-12-16 19:05:53 所属栏目:百科 来源:网络整理
导读:笔者在Android开发中都是用的’Gson’进行的Json数据解析,但都说’FastJson’解析Json数据要比’Gson’快,笔者刚开始也是这么认为,至少它的名字中有’Fast’,所以笔者就在这里专门做了测试两者的解析性能 Gson版本:2.3.1 FastJson版本:1.1.43 android

笔者在Android开发中都是用的’Gson’进行的Json数据解析,但都说’FastJson’解析Json数据要比’Gson’快,笔者刚开始也是这么认为,至少它的名字中有’Fast’,所以笔者就在这里专门做了测试两者的解析性能
Gson版本:2.3.1
FastJson版本:1.1.43 android

项目 版本 GitHub
Gson 2.3.1 https://github.com/google/gson
FastJson 1.1.43 android https://github.com/alibaba/fastjson/wiki/Android%E7%89%88%E6%9C%AC

Test Jave Bean

//**中国区域级别Json数据JavaBean*/
public class AreasBean {
        private String level;
        private String parent_id;
        private String name;
        private String postcode;
        private String id;
        private List<AreasBean> subarea;
        ...get set...
    }

Test Layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <!--解析Json字符串至对象-->
    <LinearLayout
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">
        <Button
            android:textAllCaps="false"
            android:id="@+id/btn_testGsonParseJsonToObject"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="testGsonParseJsonToObject" />
        <Button
            android:textAllCaps="false"
            android:id="@+id/btn_testFastJsonParseJsonToObject"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="testFastJsonParseJsonToObject" />
    </LinearLayout> /<!--解析对象至Json字符串-->
    <LinearLayout
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">
        <Button
            android:textAllCaps="false"
            android:id="@+id/btn_testGsonParSEObjectToJson"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="testGsonParSEObjectToJson" />
        <Button
            android:textAllCaps="false"
            android:id="@+id/btn_testFastJsonParSEObjectToJson"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="testFastJsonParSEObjectToJson" />
    </LinearLayout> </LinearLayout>

Test Activity

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static String areasJson = "";
    private static List<AreasBean> areasBeans1;
    private static List<AreasBean> areasBeans2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        areasJson = getString(R.string.json);
        findViewById(R.id.btn_testGsonParseJsonToObject).setOnClickListener(this);
        findViewById(R.id.btn_testFastJsonParseJsonToObject).setOnClickListener(this);
        findViewById(R.id.btn_testGsonParSEObjectToJson).setOnClickListener(this);
        findViewById(R.id.btn_testFastJsonParSEObjectToJson).setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            /**测试Gson解析Json成对象*/
            case R.id.btn_testGsonParseJsonToObject:
                testGsonParseJsonToObject();
                break;
            /**测试FastJson解析Json成对象*/
            case R.id.btn_testFastJsonParseJsonToObject:
                testFastJsonParseJsonToObject();
                break;
            /**测试Gson解析对象成Json*/
            case R.id.btn_testGsonParSEObjectToJson:
                testGsonParSEObjectToJson();
                break;
            /**测试FastJson解析对象成Json*/
            case R.id.btn_testFastJsonParSEObjectToJson:
                testFastJsonParSEObjectToJson();
                break;
        }
    }
    //** * 测试用 Gson 解析 Json 数据成对象 */
    private static void testGsonParseJsonToObject() {
        final long time0 = System.currentTimeMillis();
        Gson gson = new Gson();
        final Type type = new TypeToken<List<AreasBean>>() {}.getType();
        for (int i = 0; i < 10; i++) {
            areasBeans1 = gson.fromJson(areasJson,type);
        }
        Log.d("Test Json","testGsonParseJsonToObject time = " + (System.currentTimeMillis() - time0));
    }
    //** * 测试用 FastJson 解析 Json 数据成对象 */
    private static void testFastJsonParseJsonToObject() {
        final long time0 = System.currentTimeMillis();
        for (int i = 0; i < 10; i++) {
            areasBeans2 = JSON.parseArray(areasJson,AreasBean.class);
        }
        Log.d("Test Json","testFastJsonParseJsonToObject time = " + (System.currentTimeMillis() - time0));
    }
    //** * 测试用 Gson 将对象解析 Json 数据 */
    private static void testGsonParSEObjectToJson() {
        final long time0 = System.currentTimeMillis();
        String jsonString = new Gson().toJson(areasBeans1);
        Log.d("Test Json","testGsonParSEObjectToJson time = " + (System.currentTimeMillis() - time0));
    }
    //** * 测试用 FastJson 将对象解析 Json 数据 */
    private static void testFastJsonParSEObjectToJson(){
        final long time0 = System.currentTimeMillis();
        String jsonString = JSON.toJSONString(areasBeans2);
        Log.d("Test Json","testFastJsonParSEObjectToJson time = " + (System.currentTimeMillis() - time0));
    }
}

Test Result Log

Gson与FastJson分别解析Json到JaveBean所用时间对比

D/Test Json﹕ Gson:testGsonParseJsonToObect time = 222
D/Test Json﹕ FastJson:testFastJsonParseJsonToObect time = 283
D/Test Json﹕ Gson:testGsonParseJsonToObect time = 206
D/Test Json﹕ FastJson:testFastJsonParseJsonToObect time = 328
D/Test Json﹕ Gson:testGsonParseJsonToObect time = 207
D/Test Json﹕ FastJson:testFastJsonParseJsonToObect time = 295

结论:Gson解析比FastJson快

Gson与FastJson分别循环10次解析Json到JaveBean所用时间对比

D/Test Json﹕ Gson:testGsonParseJsonToObject time = 2141
D/Test Json﹕ Gson:testGsonParseJsonToObject time = 2117
D/Test Json﹕ FastJson:testFastJsonParseJsonToObject time = 2841
D/Test Json﹕ FastJson:testFastJsonParseJsonToObject time = 2740

结论:Gson解析比FastJson快

Gson与FastJson分别解析JaveBean到Json所用时间对比

D/Test Json﹕ testGsonParSEObjectToJson time = 306
D/Test Json﹕ testFastJsonParSEObjectToJson time = 231
D/Test Json﹕ testGsonParSEObjectToJson time = 207
D/Test Json﹕ testFastJsonParSEObjectToJson time = 227
D/Test Json﹕ testGsonParSEObjectToJson time = 200
D/Test Json﹕ testFastJsonParSEObjectToJson time = 237
D/Test Json﹕ testGsonParSEObjectToJson time = 194
D/Test Json﹕ testFastJsonParSEObjectToJson time = 238
D/Test Json﹕ testGsonParSEObjectToJson time = 196
D/Test Json﹕ testFastJsonParSEObjectToJson time = 229
D/Test Json﹕ testGsonParSEObjectToJson time = 189
D/Test Json﹕ testFastJsonParSEObjectToJson time = 228
D/Test Json﹕ testGsonParSEObjectToJson time = 189
D/Test Json﹕ testFastJsonParSEObjectToJson time = 228
D/Test Json﹕ testGsonParSEObjectToJson time = 190
D/Test Json﹕ testFastJsonParSEObjectToJson time = 236

结论:第一次调用方法FastJson比Gson解析快,但接着调用方法解析,Gson每次都要比FastJson快

Gson与FastJson分别循环10次解析JaveBean到Json所用时间对比

D/Test Json﹕ Gson:testGsonParSEObectToJson time = 2138
D/Test Json﹕ FastJson:testFastJsonParSEObectToJson time = 2241
D/Test Json﹕ Gson:testGsonParSEObectToJson time = 2924
D/Test Json﹕ FastJson:testFastJsonParSEObectToJson time = 3246

结论:Gson比FastJson快

结论

经过上面的简单测试,FastJson并没有说的那么Fast,不过可能笔者单方面测试可能结果并不准确,但这在我们开发中的代码并无不同,所以说,在开发能满足我们需求的而速度快的还是Google的Gson解析要快《个人见解,如果测试方面有什么问题或意见,欢迎大家留言一起讨论》

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读