簡體   English   中英

為什么通過 Thrift 發送時 java.nio.ByteBuffer 會發生變化?

[英]Why java.nio.ByteBuffer changes when sending via Thrift?

我正在寫一個 Thrift api 請求包含 Scala 中的二進制數據。

合同是這樣的:

struct Request {
  10: required string name
  20: required binary data
  30: required string type
}

發送前客戶端的ByteBuffer object是這樣的:

java.nio.HeapByteBufferR[pos=0 lim=4 cap=4]

但是,服務器收到的 ByteBuffer object 不同:

java.nio.HeapByteBuffer[pos=230 lim=234 cap=312]

我的問題是為什么會發生這種情況? 什么是不意外更改 ByteBuffer 的最佳實踐?

這是因為服務器端的 ByteBuffer 會包裝請求的所有信息,並將 pos 和 limit 設置為包含二進制數據的分區。 所以要只獲取二進制數據部分,只需使用 ByteBuffer 的 slice 方法即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM