Объект, в который мне нужно записать ByteBuffer, вводится как экземпляр интерфейса DataOutput , а не как экземпляр класса DataOutputStream (который реализует DataOutput). Я должен предположить, что ByteBuffer.hasArray () может вернуть false, поэтому у меня нет доступа к какому-либо основному массиву.
Ни DataOutput, ни DataOutputStream не предоставляют метод записи, который принимает ByteBuffer. Однако запись ByteBuffer в DataOutputStream может быть выполнена с помощью WritableByteChannel, полученного путем передачи OutputStream в служебный метод класса Channels. Но DataOutput не совместим по типу с OutputStream, и аналогичного служебного метода не существует.
Предоставляет ли SDK эффективные процедуры для этого? Я бы предпочел не создавать промежуточный байтовый массив и проходить через ByteBuffer с массовыми операциями get (эффективно реплицируя код реализаций WritableByteChannel).