我正在编写一个Thrift api,其中一个请求包含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和限制设置为包含二进制数据的分区。因此,仅获取二进制数据部分,只需使用ByteBuffer的slice方法。