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

Hessian3.2.1在序列化32.5k字符串时的有关问题

2012-12-23 
Hessian3.2.1在序列化32.5k字符串时的问题转于自己在公司的Blog:http://pt.alibaba-inc.com/wp/experience

Hessian3.2.1在序列化32.5k字符串时的问题
转于自己在公司的Blog:
http://pt.alibaba-inc.com/wp/experience_929/hessian-big-string-serialize-problems.html

网站出现比较奇怪的现象,线上总有些Offer信息反序化时出错,而测试环境却没有出现过,

通过远程调试线上环境,发现Hessian3.2.1在处理0x33标记时,会出错,跟进去发现:

Hessian3.2.1在处理大String时,以32k为一个块,最后一个不满32k的块分三种情况处理:

(1) 块大小为1到31个byte时:
用一个byte表示长度(一个byte最多表示31的长度),后面跟具体数据。

(2) 块大小为32到1023个byte时:
用两个byte表示长度,后面跟具体数据,因只需要高位byte的4个bit位,加低位byte就能够表示1023的长度,为了不浪费,高位byte的另外4个bit位被压缩用于flag。

(3) 块大小为1023到32k-1个byte时:
用’s’前缀标识为小块,进行块读取。

问题出在第二种情况,Hessian2Input没有还原压缩的4个bit位。

(1) 异常信息: (出错位置上的串已改为xxx表示)

 

热点排行