【转自】http://www.apkbus.com/blog-725636-61364.html
写博客不易,珍惜笔者劳动成果,转载请标明原创作者地址 http://www.apkbus.com/blog-725636-61364.html?_dsign=d1a2c39f
今天无意中再安卓巴士上看到了一片文章《Android开发者应该使用FlatBuffers替代JSON》,吓得我赶紧看了看,突然感觉自己用了好长时间的JSON解析似乎落伍了~~(>_<)~~
尤其是看到下面的话,更是不明觉厉;
我尝试使用FlatBuffers和JSON解析4mb的JSON文件。
FlatBuffers花了1-5ms,JSON花了大约2000ms。在使用FlatBuffers期间Android App中没有GC,而在使用JSON时发生了很多次GC
- 大致看了一下FlatBuffers,似乎挺强大,不过暂时没有测试是不是真有那么快,不过JSON解析应该没有那么慢,于是乎测试了一下平时用到的谷歌的Gson 阿里巴巴的FastJson以及安卓原生自带的org.JSON 解析的速度;
- 先写个单元测试吧:
/**
* @author 郑明亮
* @Time:2016年8月9日 下午6:31:19
* @version 1.0
*/
@org.junit.Test
public void TestSpeed2() throws Exception {
FoodDao foodDao = new FoodDao();
List<Foods> foods = foodDao.selectAll(Foods.class);
System.out.println("-------------gson-----------");
long gsonStart = System.currentTimeMillis();
gsonC(foods);// 用Gson进行拆包 和 解析
long gsonEnd = System.currentTimeMillis();
System.out.println("gsonGaps:" + (gsonEnd - gsonStart));
System.out.println("-------------gson-----------");
System.out.println("-------------FastJson-----------");
long fastStart = System.currentTimeMillis();
fastJsonC(foods);// 用FastJson进行拆包 和 解析
long fastEnd = System.currentTimeMillis();
System.out.println("gsonGaps:" + (fastEnd - fastStart));
System.out.println("-------------FastJson-----------");
System.out.println("-------------JSON-----------");
long jsonStart = System.currentTimeMillis();
jsonC(foods);// 用org.json进行拆包 和 解析
long jsonEnd = System.currentTimeMillis();
System.out.println("gsonGaps:" + (jsonEnd - jsonStart));
System.out.println("-------------JSON-----------");
}
- 调用的方法必须是
synchronized 同步
的,即运行完该方法后才执行下面的代码
private synchronized void jsonC(List<Foods> foods) throws Exception {
String jsonString = JsonTools.createJsonString("json", foods);
JSONObject object = new JSONObject(jsonString);
JSONArray array = object.getJSONArray("json");
List<Foods> list2 = new ArrayList<Foods>();
for (int i = 0; i < array.length(); i++) {
JSONObject foodObject = (JSONObject) array.get(i);
Foods foods2 = new Foods(foodObject.getInt("id"),
foodObject.getString("cookclass"),
foodObject.getString("name"),
foodObject.getString("description"),
foodObject.getString("food"),
foodObject.getString("img"),
foodObject.getString("images"),
foodObject.getString("keywords"),
foodObject.getString("message"),
foodObject.getString("url"));
list2.add(foods2);
}
String s3 = list2.toString();
}
private synchronized void fastJsonC(List<Foods> foods) {
String fastString = FastJsonTools.createJsonString(foods);
String s2 = FastJsonTools.createJsonToListBean(fastString,
Foods.class).toString();
}
private synchronized void gsonC(List<Foods> foods) {
String gsonString = GsonTools.createJsonString(foods);
String s1 = GsonTools.StringTolist(gsonString, Foods[].class)
.toString();
}
- 单元测试中调用了一个selectAll方法,具体如下:
/**
* 查找全部;
*
* @return
*/
public List selectAll(Class c) {
Session session = HibernateSessionFactory.getSession();
List list = session.createQuery("From " + c.getName()).setFirstResult(0).setMaxResults(50).list();//①
return list;
}
- 查看上面的标注①的地方可以看到我这先设置的查询的条数为50条,稍后修改这即可更改为查询100、500、1000、5000、1万、2万条
(不要问我哪儿来那么多数据……我之前写的博客上说了曾经扒到过10W+的数据……)
- 然后列一下分别是查询50条、100条、500条、1000、5000、1万、2万条数据各个类库分别需要多少时间
- 50
- 100
- 500
- 1000
- 5000
- 1万
- 2万
- 一开始测试的时候我没有取平均值,只是运行一下看看解析50条数据哪一个更快一点,竟然让我出乎意料,竟然是Android自带的jar包org.JSON!!!Gson甚至比FastJson都快这不符合情理啊……不是一直都说是阿里巴巴的FastJson最快的嘛!!!!后来我将解析50条数据提高到100、500、1000条……数据的时候就发现,随着解析数据量的增大然后逐渐的发现FastJson的优势出来了,而org.JSON却很慢了
- 分析出现上面的结果的原因,为什么在数据量少的时候,org.json 类库拆包解析的更快呢,仔细看源码会发现:
org.json在进行解析的时候需要通过for循环依次的将数据取出来放到指定对象的成员变量中
是for循环的缘故,当for循环的次数太多的时候肯定就相当耗时了,在数据量小的时候却表现的比较出色 - 然而这样解析有着明显的问题,因为每一次测试的时间都不相同,因为不是很稳定,所以应该取一下平均值,我这就对 拆包解析的方法里加了个50次的循环
/**
* @author 郑明亮
* @Time:2016年8月9日 下午6:31:19
* @version 1.0
*/
@org.junit.Test
public void TestSpeed() throws Exception {
List<Foods> foods = foodDao.selectAll(Foods.class);
System.out.println("-------------gson-----------");
long gsonStart = System.currentTimeMillis();
gsonC(foods);//用Gson进行拆包 和 解析 并循环操作50次
long gsonEnd = System.currentTimeMillis();
System.out.println("gsonGaps:" + (gsonEnd - gsonStart) / 50);
System.out.println("-------------gson-----------");
System.out.println("-------------FastJson-----------");
long fastStart = System.currentTimeMillis();
fastJsonC(foods);// 用FastJson进行拆包 和 解析 并循环操作50次
long fastEnd = System.currentTimeMillis();
System.out.println("gsonGaps:" + (fastEnd - fastStart) / 50);
System.out.println("-------------FastJson-----------");
System.out.println("-------------JSON-----------");
long jsonStart = System.currentTimeMillis();
jsonC(foods);// 用org.json进行拆包 和 解析 并循环操作50次
long jsonEnd = System.currentTimeMillis();
System.out.println("gsonGaps:" + (jsonEnd - jsonStart) / 50);
System.out.println("-------------JSON-----------");
}
private synchronized void jsonC(List<Foods> foods) throws Exception {
for (int j = 0; j < 50; j++) {
String jsonString = JsonTools.createJsonString("json", foods);
JSONObject object = new JSONObject(jsonString);
JSONArray array = object.getJSONArray("json");
List<Foods> list2 = new ArrayList<Foods>();
for (int i = 0; i < array.length(); i++) {
JSONObject foodObject = (JSONObject) array.get(i);
Foods foods2 = new Foods(foodObject.getInt("id"),
foodObject.getString("cookclass"),
foodObject.getString("name"),
foodObject.getString("description"),
foodObject.getString("food"),
foodObject.getString("img"),
foodObject.getString("images"),
foodObject.getString("keywords"),
foodObject.getString("message"),
foodObject.getString("url"));
list2.add(foods2);
}
String s3 = list2.toString();
}
}
private synchronized void fastJsonC(List<Foods> foods) {
for (int i = 0; i < 50; i++) {
String fastString = FastJsonTools.createJsonString(foods);
String s2 = FastJsonTools.createJsonToListBean(fastString,
Foods.class).toString();
}
}
private synchronized void gsonC(List<Foods> foods) {
for (int i = 0; i < 50; i++) {
String gsonString = GsonTools.createJsonString(foods);
String s1 = GsonTools.StringTolist(gsonString, Foods[].class)
.toString();
}
}
- 然后贴一下解析
1万条数据
、2万条数据
和100条数据
各个类库所用的的平均时间(这个时间不包括查询数据库所用的时间)
- 1万
- 2万
- 100条
我10万+的数据大概是40多M,也就是说1万条数据的话大概是4M,就从我的测试结果来看,还真不知道他们那个解析4Mjson数据需要用大概2000毫秒的时间,我测试的2万条数据也就是大概8M的json数据,即使是用org.json来拆包、解析都要比这个时间要短很多,更何况我们还有出色的fastJson等优秀类库。
经过这次测试之后,确实验证了阿里巴巴的FastJson相对来说是挺快的,如果用json解析的话,还是建议用fastjson吧
generated by haroopad
相关推荐
**Fastjson** 是阿里巴巴开发的高性能的JSON库,它的特点是解析速度极快,同时提供了丰富的API供开发者使用。Fastjson同样支持将Java对象转换为JSON字符串,以及将JSON字符串反序列化为Java对象。与Gson不同的是,...
Fastjson是阿里巴巴的一个高性能的JSON库,它的主要特点是解析速度快,内存消耗低。Fastjson提供了简单直观的API,使得JSON与Java对象之间的转换变得异常简便。此外,它还支持JSON到Java对象的映射,以及JSON到XML...
Fastjson是阿里巴巴开发的一个高性能的JSON库,它的特点在于解析速度快、内存消耗低,特别适合大数据量的处理。Fastjson的使用同样简单: 1. 对象转JSON: ```java Person person = new Person("John", "Doe"); ...
**FastJson** 是阿里巴巴开源的一个高性能的JSON库,它不仅提供了类似于Gson的转换功能,而且在性能上表现出色,特别适合大数据量的处理。FastJson的API设计简洁,如`JSON.parseObject()`和`JSON.toJSONString()`,...
- `org.json`库适用于小型项目,对于大型项目或性能要求较高的场景,可能需要考虑使用更强大的库,如Gson、Jackson或Fastjson。 - 在处理复杂JSON结构时,注意JSON数据类型的匹配,避免出现`JSONException`。 - `...
FastJson是阿里巴巴开发的高性能的JSON库,它的速度比Gson更快,特别适合大数据量的处理。FastJson同样提供了简单易用的API,支持JSON与Java对象的相互转换: ```java import com.alibaba.fastjson.JSON; public ...
Fastjson相比于Jackson、Gson等其他流行的JSON库,优势在于其更高的性能、更简洁的API以及对Java特性的深度支持。尽管每个库都有其适用场景,但在处理大量数据和需要快速转换时,Fastjson往往能提供更好的解决方案。...
`fastjson`是阿里巴巴提供的一个高性能的JSON库,它的优点在于解析速度极快且内存消耗低。它支持直接将Java对象转换为JSON字符串,以及将JSON字符串反序列化为Java对象。例如: ```java String jsonString = "{\...
Gson是由Google开发的一个Java库,它可以将任何Java对象转换为对应的JSON字符串,反之亦然。Gson的主要特点包括: 1. **简单易用**:Gson库通过`Gson`类提供的`toJson()`和`fromJson()`方法,可以轻松地在Java对象...
FastJson则是阿里巴巴开发的一个高性能的JSON库,同样提供了Java对象与JSON的相互转换功能,而且速度较快,适合对性能有较高要求的场景。 Gson库的核心功能包括: 1. **对象到JSON**:通过`Gson().toJson()`方法,...
JSON 中 fastjson、jackson、gson 的选择和比较 JSON 是一种轻量级的数据交换格式,广泛应用于数据的通信传输中,...fastjson、jackson 和 gson 都是优秀的 JSON 解析器,选择哪一个取决于具体的项目需求和个人喜好。
**Fastjson** 是阿里巴巴开发的一个高性能的JSON库,它同样提供了Java对象与JSON数据之间的相互转换功能。Fastjson的特点在于其速度非常快,适合大数据量的处理。它支持多种API接口,包括`JSON.parseObject()`和`...
1. **高性能**:Fastjson在处理大规模JSON数据时表现出优秀的性能,它的解析速度比其他流行的JSON库如Jackson、Gson等更快。 2. **简单易用**:Fastjson的API设计简洁,易于理解和使用。例如,可以使用`JSON....
Fastjson的性能表现优异,相比其他流行的JSON库(如Jackson、Gson等),在处理大量数据时,其速度更快,内存消耗更低。这是由于Fastjson采用了优化的代码生成和解析策略,以及高效的内存管理机制。 四、使用示例 ...
它在处理大数据量时表现出色,尤其在速度和内存占用方面优于`Gson`,因此在对性能有较高要求的场景下,`Fastjson`是一个很好的选择。 两者在功能上都相当完备,但在具体使用时,可以根据项目需求和性能测试结果来...
阿里巴巴的Fastjson是一个高性能的JSON库,它的特点在于速度和轻量级设计。Fastjson的主要特性包括: 1. **极快的速度**:Fastjson在性能测试中通常优于其他JSON库,尤其在大数据量处理时。 2. **简单易用**:API...
1. 高性能:FastJson的解析速度非常快,相比其他同类库如Jackson和Gson,其在大量数据处理时表现出更优秀的性能。 2. 简单易用:API设计简洁,支持多种转换方式,使得代码编写更加直观。 3. 动态类型:FastJson支持...
Fastjson是阿里巴巴的一个高性能的JSON库,它的速度和效率都非常出色。与Gson相比,Fastjson提供了更丰富的API,支持更多的特性。以下是如何使用Fastjson进行序列化和反序列化的例子: 1. **序列化**: ```java ...
Fastjson是阿里巴巴的一个高性能的JSON库,它的设计目标是让JSON处理变得简单而快速。1.1.33版本在前一版本的基础上进行了优化和增强,提供了更多的功能和更好的性能。Fastjson的核心特性包括: 1. **高性能**:...
`org.json`框架是一个Java库,专为处理JSON数据而设计,尤其在处理AJAX非XML格式的响应时显得尤为重要。本篇文章将详细介绍`org.json`框架以及如何利用它来生成和操作JSON对象。 `org.json`框架由Mozilla ...