UnsupportedOperationException on ByteBuffer.asChar

2019-07-13 11:10发布

问题:

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());

回答1:

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()));


回答2:

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);


标签: java nio java-6