Java ByteBuffer.asCharArray().array()上的UnsupportedOperationException
有人能这么好心地解释一下为什么在下面这行中我有不支持的操作异常吗 System.out.println(ByteBuffer.wrap(新字节[]{'t','e','s','t','n'}).asCharBuffer().array())Java ByteBuffer.asCharArray().array()上的UnsupportedOperationException,java,nio,java-6,Java,Nio,Java 6,有人能这么好心地解释一下为什么在下面这行中我有不支持的操作异常吗 System.out.println(ByteBuffer.wrap(新字节[]{'t','e','s','t','n'}).asCharBuffer().array()) asCharBuffer不包装char[],因此无法获取其array() 看来你要做的是 System.out.println(Arrays.toString("test\n".toCharArray())); 你读了Javadoc吗 并非所有的CharBu
asCharBuffer不包装
char[]
,因此无法获取其array()
看来你要做的是
System.out.println(Arrays.toString("test\n".toCharArray()));
你读了Javadoc吗
并非所有的CharBuffer
s都有char[]
支持ByteBuffer.asCharBuffer()
将ByteBuffer
的视图返回为CharBuffer
,因此其结果由字节[]
支持
array()
仅返回实际支持缓冲区的char[]
,如果不存在缓冲区,则抛出UOE。你能得到的最接近的替代方案是
char[] result = new char[charBuf.remaining()];
charBuf.get(result);
事实上,我正在用ByteBuffer读取FileChannel(当然知道它是文本文件),并且希望使用ByteBuffer的CharBuffer。如果我做不到,有这个方法的原因是什么?第二个问题是如何以正确的方式进行?谢谢。当您构建CharBuffer时,它是char[]
的包装器,您可以使用array()
来获取构建缓冲区的原始数组。类似于?注意,您遇到的问题是,您必须读取整数个字符,如果使用多字节字符编码,这可能会很棘手,除非你在解码前把所有的东西都读了。好啊我懂了。谢谢。