I need to put the contents of a java.nio.ByteBuffer
into an java.io.OutputStream
. (wish I had a Channel
instead but I don't) What's the best way to do this?
I can't use the ByteBuffer's array()
method since it can be a read-only buffer.
I also may be interspersing writes to the OutputStream between using this ByteBuffer and having a regular array of byte[]
which I can with use OutputStream.write()
directly.
To write data into a FileChannel or read from it, you need a ByteBuffer . Data is put into the ByteBuffer with put() and then written from the buffer to the file with FileChannel. write(buffer) . FileChannel.
Streams ( InputStream and OutputStream ) transfer binary data. If you want to write a string to a stream, you must first convert it to bytes, or in other words encode it. You can do that manually (as you suggest) using the String. getBytes(Charset) method, but you should avoid the String.
Look at Channels.newChannel(OutputStream). It will give you a channel given an OutputStream. With the WritableByteChannel adapter you can provide the ByteBuffer which will write it to the OutputStream.
public void writeBuffer(ByteBuffer buffer, OutputStream stream) { WritableByteChannel channel = Channels.newChannel(stream); channel.write(buffer); }
This should do the trick!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With