3

Could someone be so kind to explain why on the following line I have UnsupportedOperationException?

System.out.println(ByteBuffer.wrap(new byte[] {'t', 'e', 's', 't', '\n'}).asCharBuffer().array());

0

2 Answers 2

3

The asCharBuffer doesn't wrap a char[] so you cannot obtain its array()

It appears what you are trying to do is.

System.out.println(Arrays.toString("test\n".toCharArray()));
Sign up to request clarification or add additional context in comments.

4 Comments

Actually I'm reading FileChannel with ByteBuffer (know for sure it is text file) and would like to have CharBuffer from ByteBuffer. If I cannot do it, what is the reason to have the method? And second question how to do it in a right way? Thank you.
When you build a CharBuffer which is a wrapper for an char[] you can use array() to get the original array you built the buffer from.
Note, you have the problem that you must read a whole number of characters, which can be tricky if you have a multi-byte character encoding, unless you read everything before decoding.
3

Did you read the Javadoc for CharBuffer.array()?

Not all CharBuffers are backed by a char[]. ByteBuffer.asCharBuffer() returns a view of the ByteBuffer as a CharBuffer, so its result is backed by a byte[].

array() only returns the char[] that actually backs the buffer, and if none exists, it throws a UOE. The closest alternative you'll be able to get is something like

char[] result = new char[charBuf.remaining()];
charBuf.get(result);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.