锁定老帖子 主题:Fastjson技术内幕
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-08-11
wenshao 写道 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时,会导致内容错乱。 Hi, wenshao 假如我在调用close()方法后,不需要在保留buf的数据,那我可不可以直接在close()方法里把count重置为0.然后在构造函数里面就可以把那个else分支里面的set(null)抹去? 谢谢。 |
|
返回顶楼 | |
发表时间:2011-08-11
回复ilxlf:
可以的。我很好奇的问一下,你要干嘛? |
|
返回顶楼 | |
发表时间:2011-08-11
Hi, wenshao
我想借用一下你这个类的思想,然后自己实现一个。我想用一个包装好的buffer类去替换char[]。 我这个类的用完的时候会把buffer的内容清空一下。 我看你的那个else分支的时候当时有点晕,不知道为什么要这么做。 我还有些问题想和你沟通一下:什么应用场景下,一个线程会拥有两个SerializeWriter的实例?那这个时候每个实例里面count的值是各不一样的?是不是应该限制这样用? 应该一个SerializeWriter用完后close掉,如果重新在new一个SerializeWriter的话,我感觉那个char[]不用清空,因为这个时候那个count是0开始的。不知道我的理解对不对。 请wenshao指点一下。 谢谢 |
|
返回顶楼 | |
发表时间:2011-08-11
ilxlf 写道 Hi, wenshao
我想借用一下你这个类的思想,然后自己实现一个。我想用一个包装好的buffer类去替换char[]。 我这个类的用完的时候会把buffer的内容清空一下。 我看你的那个else分支的时候当时有点晕,不知道为什么要这么做。 我还有些问题想和你沟通一下:什么应用场景下,一个线程会拥有两个SerializeWriter的实例?那这个时候每个实例里面count的值是各不一样的?是不是应该限制这样用? 应该一个SerializeWriter用完后close掉,如果重新在new一个SerializeWriter的话,我感觉那个char[]不用清空,因为这个时候那个count是0开始的。不知道我的理解对不对。 请wenshao指点一下。 谢谢 如果存在自定义的序列化,这时候就可能一个线程创建了多个SerializeWriter对象,从而导致其中的内容buf错乱。这个设计是因为遇到过这样的bug才做的。 |
|
返回顶楼 | |
发表时间:2011-08-11
最后修改:2011-08-11
问个问题
在web项目中和spring集成的时候这样写 Java代码 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <bean class="**.FashtJsonHttpMessageConverter" /> </list> </property> </bean> 事实是是不会起作用的 查看spring代码发现AnnotationDrivenBeanDefinitionParser类中这样写 Java代码 private static final boolean jacksonPresent = ClassUtils.isPresent("org.codehaus.jackson.map.ObjectMapper", AnnotationDrivenBeanDefinitionParser.class.getClassLoader()) && ClassUtils.isPresent("org.codehaus.jackson.JsonGenerator", AnnotationDrivenBeanDefinitionParser.class.getClassLoader()); 而后 Java代码 if (jacksonPresent) { messageConverters.add(createConverterBeanDefinition(MappingJacksonHttpMessageConverter.class, source)); } 并set到由AnnotationDrivenBeanDefinitionParser创建的AnnotationMethodHandlerAdapter类中 而如果在spring-mvc配置AnnotationMethodHandlerAdapter类的话,会创建另外AnnotationMethodHandlerAdapter实例(并不会被webmvc上下文引用,游离在系统中)。 难道真的要改写spring代码才能解决这个问题? 备注:我用的spring3.05 |
|
返回顶楼 | |
发表时间:2011-08-11
试用了一下,真的非常不错,顶一个。
|
|
返回顶楼 | |
发表时间:2011-08-16
还没有太多的试用和口碑,就技术内幕了,也太快了。还是先等口碑出来再说把
|
|
返回顶楼 | |
发表时间:2011-08-17
最后修改:2011-08-17
忘记说了,转换的时候带中文可能会出现乱码(只是小部分字符显示的是乱码)
这部分在编辑器下面显示的是nul 在记事本上面是其他形式 很明显不是源对象的乱码而是生成的时候加上去的部分导致乱码 我怀疑是不是操作byte的时候导致的问题 |
|
返回顶楼 | |
发表时间:2011-09-05
最后修改:2011-09-05
温少,解析数组形如:
[,[[832186,,,'1.545',,,,,,0,,],[,,,1]],[1,[[8595637,,],[1,[3,,'0.90','0.92','1.50'], [2,1]]]]] 逗号前的空白怎么不是用null来占位呢,而是直接pass掉了。这样解析不能真正还原数据的格式啊,json-lib采用的JSONNull来占位的 |
|
返回顶楼 | |
发表时间:2011-09-06
...
这是一个468bytes的JSON Bytes测试,从测试结果来看... ... 想知道大数据处理比较的情况,如几百M。。。 据我所知protobuf大数据序列化挺慢的 谢谢~ |
|
返回顶楼 | |