2009-02-23 4 views
32

私はjava.io.OutputStreamjava.nio.ByteBufferの内容を配置する必要があります。 (私はChannelを代わりに持っていたが、私はそうしたくなかった)これを行う最も良い方法は何ですか?ByteBufferの内容をOutputStreamに入れる方法は?

それが読み取り専用バッファすることができるので、私はByteBufferののarray()メソッドを使用することはできません。

また、このByteBufferを使用して、byte[]の通常の配列を使用して、OutputStream.write()を直接使用する間、OutputStreamへの書き込みが散在している可能性があります。

答えて

44

Channels.newChannel(OutputStream)を見てください。これはあなたにOutputStreamを与えられたチャンネルを与えます。 WritableByteChannelアダプタを使用すると、OutputStreamに書き込むByteBufferを提供できます。

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

    channel.write(buffer); 
} 

これはトリックを行う必要があります!

+0

私は、チャネルだけでなく、ストリームを続けるならば、私は両方の呼び出しを混在できますか? –

+0

確かに、毎回チャンネルを作成するコストを削減できます:) –

+8

このアプローチでは、ByteBufferから一時的な配列にコピーしてOutputStreamに書き込むことに注意してください。パフォーマンスが重要な場合は、不必要なブロックコピーを避けるためにリファクタリングを少し行う必要があります。 –

関連する問題