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