我正在编写一个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方法。