使用版本:

    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=; i< n ; i++){
list.add(createPeople());
} return list;
} public People createPeople(){
People people = new People();
people.name = getRandomString();
people.age = Math.abs(mRandom.nextInt()) % ;
people.food = createFood();
return people;
} public Food createFood(){
Food food = new Food();
food.name = getRandomString();
food.num = Math.abs(mRandom.nextInt()) % ;
food.price = Math.abs(mRandom.nextInt()) % ;
return food;
} public String getRandomString(){
int size = Math.abs(mRandom.nextInt()) % ;
String str = "";
int len = mString.length();
for(int i=; 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、建议使用Gson
5、上述样板存在局限,没有覆盖到很多样例,具体项目中,可以实测之后在选择方案。

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

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

    Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的 ...

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

    一.android 常用的json解析方式 Android 开发上常用的json解析方式有:Gson, fastJson,jackson. 因为jackjson jar包会比较大点(700+k),Gs ...

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

    JSON技术的调研报告 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包, 包括 ...

  4. JSON解析工具比较,主要GSON和FastJSON

    JSON解析工具比较,主要GSON和FastJSON 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确 ...

  5. 浅谈Gson和fastjson使用中的坑

    相信大家在代码编写中都用过Gson和fastjson吧,用来进行 Java对象和json字符串之间的转换. 本篇文章就主要介绍博主在工作中使用这两款工具时遇到的坑和对应的解决办法. 觉得有用的可以点个 ...

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

    声明: 1.本帖只提供代码,不深入讲解原理.如果读者想要深入了解,那就不要在这个帖子上浪费时间了 2.客户端用的是Google官方的Volley访问服务器,具体了解Volley请戳 这里 3.本帖三种 ...

  7. Gson 和 Fastjson 你不知道的事

    背景 目前在公司负责的业务, 主要是跟JSON数据打交道, fastjson .gson都用, 他们适用于不同场景.fastjson号称是业界处理json效率最高的框架, 没有之一.但在某些场景下, ...

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

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...

  9. gson和fastjson将json对象转换成javaBean 简单对照

    今天在网上看代码时,发现项目使用了Gson,用于将json字符串转换成javaBean. 以前没使用过Gson,随即,简单入了个们, 想起fastjson也有将json字符串转换成javaBean的A ...

随机推荐

  1. DNS主从服务,子域授权,view视图,日志系统,压力测试

    DNS主从服务,子域授权,view视图,日志系统,压力测试 DNS性能测试工具queryperfDNS查询过程: DNS主从建立: 环境: 主服务器:10.140.165.93 从服务器:10.140 ...

  2. JAVA学习博客----2015.4

    这是开始写的第一篇学习博客,记录一下每个月的学习进度和掌握程度,因为这是第一次写学习博客而且已经看编程方面的书已经有几个月了,所以这一篇学习博客可能看似有些乱或者篇幅太长.从十二月的<程序员教程 ...

  3. Book Review: PowerShell 3.0 Advanced Administration Handbook

    Recently I read a book, PowerShell 3.0 Advanced Administration Handbook, which I found really worthy ...

  4. nested exception is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.

    1缺少jar包 2spring配置文件里http://www.springframework.org/schema/beans/spring-beans-3.2.xsd的版本与实际jar包不一致

  5. [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  6. Java-JDK配环境,eclipse工具认识

    一.JDK配环境: 1.JDK思维导图 2.测试代码: 需要注意点位类名大小写的区分,符号为英式输入法下的, ; . class Hello{ public static void main(Stri ...

  7. crossplatform---electron Quick Start

    Electron enables you to create desktop applications with pure JavaScript by providing a runtime with ...

  8. Atitit.java expression fsm 表达式分词fsm引擎

    Atitit.java expression fsm 表达式分词fsm引擎 C:\0workspace\AtiPlatf_cms\src\com\attilax\fsm\JavaExpFsm.java ...

  9. iOS开发之静态库(一)—— 基本概念

    在项目开发过程中,经常出现优秀代码重用现象,又或者提供给第三方功能模块却又不想让其看到源代码,这些时候,通常的做法是将代码封装成库或者框架,这些在Windows编程或Linux编程中非常容易实现的过程 ...

  10. 详解Bootstrap面板组件

    面板组件主要作用是用来处理一些其他组件无法完成的功能,在不同的版本中具有不同的源码: LESS:panels.less SASS:_panels.scss 基础面板非常简单,就是一个div容器中运用了 ...