繁体   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