首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

Fastjson内情

2012-08-11 
Fastjson内幕JSON协议使用方便,越来越流行。JSON的处理器有很多,为什么需要再写一个呢?因为我们需要一个性

Fastjson内幕
JSON协议使用方便,越来越流行。JSON的处理器有很多,为什么需要再写一个呢?因为我们需要一个性能很好的JSON Parser,希望JSON Parser的性能有二进制协议一样好,比如和protobuf一样,这可不容易,但确实做到了。有人认为这从原理上就是不可能的,但是计算机乃实践科学,看实际的结果比原理推导更重要。

这篇文章告诉大家:
* Fastjson究竟有多快
* 为什么Fastjson这么快
* 你能用Fastjson来做什么!
* 如何获得fastjson?

首先,Fastjson究竟有多快?
我们看一下使用https://github.com/eishay/jvm-serializers/提供的程序进行测试得到的结果:

在上面例子看,虚线标注的三个部分是key,如果key_id、key_name、key_salary这三个key是顺序的,就可以做优化处理,这三个key不需要被读取出来,只需要比较就可以了。

这种算法分两种模式,一种是快速模式,一种是常规模式。快速模式是假定key是顺序的,能快速处理,如果发现不能够快速处理,则退回常规模式。保证性能的同时,不会影响功能。

在这个例子中,常规模式需要处理13个token,快速模式只需要处理6个token。

实现sort field fast match算法的代码在这个类[com.alibaba.fastjson.parser.deserializer.ASMDeserializerFactory|http://code.alibabatech.com/svn/fastjson/trunk/fastjson/src/main/java/com/alibaba/fastjson/parser/deserializer/ASMDeserializerFactory.java],是使用asm针对每种类型的VO动态创建一个类实现的。
这里是有一个用于演示sort field fast match算法的代码:
http://code.alibabatech.com/svn/fastjson/trunk/fastjson/src/test/java/data/media/ImageDeserializer.java

int hash = 0;for (;;) {    ch = buf[index++];    if (ch == '"') {        bp = index;        this.ch = ch = buf[bp];        strVal = symbolTable.addSymbol(buf, start, index - start - 1, hash); // 通过symbolTable来获得缓存好的symbol,包括fieldName、enumValue        break;    }        hash = 31 * hash + ch; // 在token scan的过程中计算好hash    // ... ...}


我们能用fastjson来作什么?
1、替换其他所有的json库,java世界里没有其他的json库能够和fastjson可相比了。
2、使用fastjson的序列化和反序列化替换java serialize,java serialize不单性能慢,而且体制大。
3、使用fastjson替换hessian,json协议和hessian协议大小差不多一样,而且fastjson性能优越,10倍于hessian
4、把fastjson用于memached缓存对象数据。


如何获得fastjson
h3. 官方网站
Fastjson是开源的,基于Apache 2.0协议。你可以在官方网站了解最新信息。
http://code.alibabatech.com/wiki/display/FastJSON/Home

maven用户
* Maven仓库 http://code.alibabatech.com/mvn/releases/
{code}
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>fastjson</artifactId>
     <version>1.1.2</version>
</dependency>
{code}

Downlaods
Binary : http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/1.1.2/fastjson-1.1.2.jar
Source :http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/1.1.2/fastjson-1.1.2-sources.jar
Subversion : http://code.alibabatech.com/svn/fastjson/trunk/fastjson/ 1 楼 chenchao051 2011-08-07   正准备在项目中使用fastjson,目前用的是jsonlib,果断抛弃。 2 楼 zhaoxjmail 2011-08-27   支持楼主!! 3 楼 tangduDream 2012-02-09   请教一个问题,
关于@JSONField,

我在把一个Bean 转成 String , 我需要某个字段不序列出来,所以我在属性上面加了一个注解
@JSONField(serialize=false,deserialize=true)

但是,我这样写了之后 ,那个字段还是被解析出来了!!


请问楼主,这个是什么原因呀。


热点排行