2009-02-23 6 views
32

Мне нужно поставить содержимое java.nio.ByteBuffer в java.io.OutputStream. (желаю, чтобы у меня был Channel, но я этого не делал) Каков наилучший способ сделать это?Как поместить содержимое ByteBuffer в OutputStream?

Я не могу использовать метод ByteBuffer array(), так как он может быть только для чтения.

Я также могу перемешать записи в OutputStream между использованием этого ByteBuffer и иметь регулярный массив byte[], который я могу использовать с OutputStream.write() напрямую.

ответ

44

Посмотрите на Channels.newChannel(OutputStream). Он даст вам канал с выходом OutputStream. С адаптером WritableByteChannel вы можете предоставить ByteBuffer, который будет записывать его в OutputStream.

public void writeBuffer(ByteBuffer buffer, OutputStream stream) { 
    WritableByteChannel channel = Channels.newChannel(stream); 

    channel.write(buffer); 
} 

Это должно сделать трюк!

+0

Если я сохраню канал, а также поток, могу ли я смешивать вызовы обоих? –

+0

Ya, конечно же, уменьшает стоимость создания канала каждый раз :) –

+8

Обратите внимание, что этот подход включает в себя копирование из ByteBuffer во временный массив, который затем записывается в OutputStream. Если производительность важна, вам может потребоваться немного рефакторинга, чтобы избежать ненужных блочных копий. –

 Смежные вопросы

  • Нет связанных вопросов^_^