ByteBuffer中不容忽视的flip()方法


最近在对一个thrift的service端进行自动化测试,做了一个thrift的client端,client端需要传一个装有由protobuf实例序列化byte数组的ByteBuffer,实现方法为:

ByteBuffer key=ByteBuffer.allocate(p2q.toByteArray().length);
key.put(p2q.toByteArray());

但是client收到的service端的返回始终不正确。由于protobuf之前没有用过,是个新鲜的玩意,所以始终怀疑问题出在这块儿了;反复查找,并对该protobuf实例在本地进行了反序列化,结果发现一切OK……。经过无数的折腾,最终将上面贴的代码改为:

ByteBuffer key=ByteBuffer.wrap(p2q.toByteArray());

竟然好了!高兴之余分析原因,原来之前在对ByteBuffer实例put操作后未进行flip(),致使ByteBuffer对象的position到了对象的最后位置;这样一个小小的低级错误,引出了如此的周折,引以为戒吧。

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM