Почему java .nio.ByteBuffer меняется при отправке через Thrift? - PullRequest
0 голосов
/ 09 мая 2020

Я писал 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?

1 Ответ

1 голос
/ 11 мая 2020

Это связано с тем, что ByteBuffer на стороне сервера будет обертывать всю информацию запроса и устанавливать pos и ограничение для раздела, содержащего двоичные данные. Итак, чтобы получить только двоичную часть данных, просто используйте метод среза ByteBuffer.

...