Charset ByteBuffer.asCharBuffer()使用了什么?它似乎将3个字节转换为我的系统中的一个字符。
在相关的说明中,CharsetDecoder与ByteBuffer.asCharBuffer()的关系如何?
UPDATE :关于我正在使用的ByteBuffer的实现,我正在调用ByteBuffer.allocate(1024).asCharBuffer()
。我无法评论在幕后使用什么实现。
答案 0 :(得分:3)
对于第一个问题 - 我认为它使用Java的原生字符编码(UTF-16)。
答案 1 :(得分:1)
据我了解,它没有使用任何东西。它只是假设它已经被正确解码为Java的字符串,这意味着UTF-16。这可以通过查看HeapByteBuffer的源来显示,其中返回的charbuffer最终调用(little endian version):
static private char makeChar(byte b1, byte b0) {
return (char)((b1 << 8) | (b0 & 0xff));
}
所以这里唯一要处理的是你负责的其余部分的字节顺序。这也意味着使用Decoder类通常更有用,您可以在其中指定编码。
答案 2 :(得分:0)
关注jdk7,jdk/src/share/classes/java/nio
X-Buffer.java.template
将ByteBuffer.allocate()
映射到Heap-X-Buffer.java.template
Heap-X-Buffer.java.template
将ByteBuffer.asCharBuffer()
映射到ByteBufferAs-X-Buffer.java.template
ByteBuffer.asCharBuffer().toString()
调用CharBuffer.put(CharBuffer)
,但我无法弄清楚这会导致什么最终这可能导致Bits.makeChar()
定义为:
static private char makeChar(byte b1, byte b0) {
return (char)((b1 << 8) | (b0 & 0xff));
}
但我无法弄清楚如何。