为什么java.nio.ByteBuffer在通过Thrift发送时会发生更改



我正在编写一个ThriftAPI,请求在Scala中包含二进制数据。

合同是这样的:

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

发送之前客户端中的ByteBuffer对象如下:

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

然而,服务器接收到的ByteBuffer对象不同:

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

我的问题是为什么会发生这种情况?为了避免意外更改ByteBuffer,最好的做法是什么?

这是因为服务器端的ByteBuffer会包装请求的所有信息,并将pos和limit设置为包含二进制数据的分区。因此,要只获取二进制数据部分,只需使用ByteBuffer的slice方法。

最新更新