68

Does anyone know how to convert ByteBuffer to byte[] array? I need to get byte array from my ByteBuffer. When I run bytebuffer.hasArray() it returns no. Every question I looked so far is converting byte array to byteBuffer, but I need it other way around. Thank you.

4
  • 3
    Have you tried byteBuffer.array()? Commented Feb 26, 2015 at 13:50
  • 1
    @JohnnyWiller - it will fail ... hasArray is returning false. Commented Feb 26, 2015 at 13:55
  • Yes i did with no success. Commented Feb 26, 2015 at 13:55
  • Ok.. I think nomis's answer will work :) Commented Feb 26, 2015 at 13:56

2 Answers 2

144

ByteBuffer exposes the bulk get(byte[]) method which transfers bytes from the buffer into the array. You'll need to instantiate an array of length equal to the number of remaining bytes in the buffer.

ByteBuffer buf = ...
byte[] arr = new byte[buf.remaining()];
buf.get(arr);
Sign up to request clarification or add additional context in comments.

7 Comments

Code only anwers are normally improved by adding some text explaining what the code is doing - can you add a bit of text to explain to the OP?
don't forget to call buf.rewind(), otherwise buf.remaining() will return with incorrect value
hi, buf.get(arr) still returns a ByteBuffer, is there any other alternative?
@SeetharamaniTmr - The bytes are being filled into "arr" variable and are not the returned value.
byte[] arr = new byte[ buf.position() ]; buf.rewind(); buf.get(arr)
|
11

If hasArray() reports false then, calling array() will throw an exception.

In that case, the only way to get the data in a byte[] is to allocate a byte[] and copy the bytes to the byte[] using get(byte[]) or similar.

2 Comments

It's so lame that I cannot get the backing array without modifying the buffer position...
You can easily record the position, copy the bytes and then reset the position.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.