论坛首页 Java企业应用论坛

Fastjson技术内幕

浏览 87025 次
该帖已经被评为精华帖
作者 正文
   发表时间:2011-08-09  
bizzad 写道
楼上的bean类,包含了非java自定义类型,这种bean设计不应该被推荐,复杂的项目容易引起问题



那些是非java自定义类型
0 请登录后投票
   发表时间:2011-08-09  
lanblue173 写道
bizzad 写道
楼上的bean类,包含了非java自定义类型,这种bean设计不应该被推荐,复杂的项目容易引起问题



那些是非java自定义类型



我本意是指java中自带的类型,指可以直接映射为数据库中某一字段的类型
0 请登录后投票
   发表时间:2011-08-09  

楼主做的真是太好了!

大约1个月以前,在看spymemcache代码时,看到它的编码使用除了int、long、boolean、byte等使用了自己的编码,Object类型直接使用java的序列化时,就觉得:1.jdk的序列化使用反射,递归遍历,速度不是很快;2.输出的序列化信息中,包含有类型信息,就是一个文本协议的Map,序列化后太大,在大量memcache请求下,网络的消耗太大;所以,当时应该找到一种更好的方法。

然后,看到了protobuf,但是需要自己写一个描述文件,觉得不是很方便;

如果,可以实现二进制的协议(序列化后,size小),而且可以使用asm技术来自动生成描述文件,那样就太好了。

最近,也做了很多这方面的准备,但是,看到楼主的分析,觉得自己....

希望,楼主以后做的更好!
0 请登录后投票
   发表时间:2011-08-09  
fast,貌似不错
0 请登录后投票
   发表时间:2011-08-09  
列举了hessian,居然不列举phprpc/hprose项目。。。。
楼主不厚道啊。
0 请登录后投票
   发表时间:2011-08-09  
人才阿,祖国IT界的栋梁。
0 请登录后投票
   发表时间:2011-08-10  
感觉protobuf比fastjson还要快,,,飘过
0 请登录后投票
   发表时间:2011-08-10  
Hi, wenshao

我看了一下SerializeWriter的代码,有个地方不太理解。如果有时间的话请帮我解答一下:

public SerializeWriter() {
    buf = bufLocal.get(); // new char[1024];
    if (buf == null) {
buf = new char[1024];
    } else {
bufLocal.set(null);
    }
}

我想问的是为什么在else分支里面要调用set(null)。这样岂不是又把buf赋值为null? 那再次调用的时候又要重新在调用 new char[1024]?

谢谢。
0 请登录后投票
   发表时间:2011-08-10  
前段时间仔细了解了下protobuf
想请教一些问题

1.protobuf能解决兼容的问题,fastjson可以么?
多了一些数据,或者少了一些,会抛异常不?

2.protobuf可以直接使用no-sql数据库的append操作减少io,fastjson可以么?
0 请登录后投票
   发表时间:2011-08-10  
ilxlf 写道
Hi, wenshao

我看了一下SerializeWriter的代码,有个地方不太理解。如果有时间的话请帮我解答一下:

public SerializeWriter() {
    buf = bufLocal.get(); // new char[1024];
    if (buf == null) {
buf = new char[1024];
    } else {
bufLocal.set(null);
    }
}

我想问的是为什么在else分支里面要调用set(null)。这样岂不是又把buf赋值为null? 那再次调用的时候又要重新在调用 new char[1024]?

谢谢。


你看close方法:
public void close() {
    bufLocal.set(buf);
}


如果不做bufLocal.set(null),一个线程持有两个SerializeWriter时,会导致内容错乱。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics