|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
JAVA学习必须明确这是一项投资,对于大多数的人来说,学习JAVA是为了就业,还有就是刚走向工作位置的朋友想尽快赶上工作的节奏。明天在写code时,要挪用thrift的TDeserializer.deserialize()办法,发明其供应的接口很欠好用。会招致使用代码的多一次copy。
thrift源码以下:- publicvoiddeserialize(TBasebase,byte[]bytes)throwsTException{base.read(protocolFactory_.getProtocol(newTIOStreamTransport(newByteArrayInputStream(bytes))));}
复制代码 能够看出,这里只能够传如byte[].
在使用程序中,假如接纳buffer复用,就会要招致buffer的不定长,如许的话,要挪用此函数就请求一其中间的copy历程,(因为java中并没有array的slice,据我所知效力最高的数组copy是System.arrayCopy(),挪用native办法),招致华侈空间和工夫。
办理办法是,增加此办法,但需编译thrift.jar- publicvoiddeserialize(TBasebase,byte[]bytes,intoffset,intlen)throwsTException{base.read(protocolFactory_.getProtocol(newTIOStreamTransport(newByteArrayInputStream(bytes,offfset,len))));}
复制代码 如许的话就能够完成使用层的buffer复用,并且完成反序列化的zero-copy.
而学习JAVA我觉得最应该避免的就是:只学习,不思考,只记忆,不实践! |
|