为什么通过Thrift发送时java.nio.ByteBuffer发生变化?

问题描述 投票:0回答:1

我正在编写一个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的最佳实践?

java scala thrift bytebuffer
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.