首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

thrift Message deserialize 步骤的一个缺点及改进

2012-10-08 
thrift Message deserialize 方法的一个缺点及改进今天在写code时,要调用thrift的TDeserializer.deseriali

thrift Message deserialize 方法的一个缺点及改进

今天在写code时,要调用thrift的TDeserializer.deserialize()方法,发现其提供的接口很不好用。会导致应用代码的多一次copy。

?

thrift源码如下:

 public void deserialize(TBase base, byte[] bytes) throws TException {    base.read(        protocolFactory_.getProtocol(          new TIOStreamTransport(            new ByteArrayInputStream(bytes))));  }

?

可以看出,这里只可以传如byte[].

在应用程序中, 如果采用buffer复用,就会要导致buffer的不定长,这样的话,要调用此函数就要求一个中间的copy过程,(由于java中并无array的slice,据我所知效率最高的数组copy是System.arrayCopy(),调用native方法),导致浪费空间和时间。

?

解决方法是, 添加此方法,但需编译thrift.jar

 public void deserialize(TBase base, byte[] bytes, int offset, int len) throws TException {    base.read(        protocolFactory_.getProtocol(          new TIOStreamTransport(            new ByteArrayInputStream(bytes, offfset, len))));  }

?这样的话就可以实现应用层的buffer复用,而且实现反序列化的zero-copy.

热点排行