Запись содержимого ByteBuffer в DataOutput? - PullRequest
0 голосов
/ 11 мая 2018

Объект, в который мне нужно записать ByteBuffer, вводится как экземпляр интерфейса DataOutput , а не как экземпляр класса DataOutputStream (который реализует DataOutput). Я должен предположить, что ByteBuffer.hasArray () может вернуть false, поэтому у меня нет доступа к какому-либо основному массиву.

Ни DataOutput, ни DataOutputStream не предоставляют метод записи, который принимает ByteBuffer. Однако запись ByteBuffer в DataOutputStream может быть выполнена с помощью WritableByteChannel, полученного путем передачи OutputStream в служебный метод класса Channels. Но DataOutput не совместим по типу с OutputStream, и аналогичного служебного метода не существует.

Предоставляет ли SDK эффективные процедуры для этого? Я бы предпочел не создавать промежуточный байтовый массив и проходить через ByteBuffer с массовыми операциями get (эффективно реплицируя код реализаций WritableByteChannel).

1 Ответ

0 голосов
/ 11 мая 2018

Я не верю, что для этого есть одна строчка.Простого цикла while должно быть достаточно:

DataOutput out = ...
ByteBuffer bb = ...
while (bb.hasRemaining()) {
  out.writeByte(bb.get());
}
...