Charset做的ByteBuffer.asCharBuffer()使用什么?
Charset做的ByteBuffer.asCharBuffer()使用什么? 它似乎在我的系统上将3个字节转换为一个字符。
在相关的说明中, CharsetDecoder如何与ByteBuffer.asCharBuffer()相关联?
更新 :关于我正在使用的ByteBuffer的实现,我正在调用ByteBuffer.allocate(1024).asCharBuffer()
。 我不能评论在幕后使用什么实现。
对于第一个问题 – 我相信它使用Java的原生字符编码(UTF-16)。
据我了解,它没有使用任何东西。 它只是假设它已经被正确解码为Java的字符串,这意味着UTF-16。 这可以通过查看HeapByteBuffer的源来显示,其中返回的charbuffer最终调用(little endian version):
static private char makeChar(byte b1, byte b0) { return (char)((b1 << 8) | (b0 & 0xff)); }
因此,这里唯一要处理的是你负责的其余部分的字节顺序。 这也意味着使用Decoder类通常更有用,您可以在其中指定编码。
看看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)); }
但我无法弄清楚如何。