Chateet在ByteBuffer.asCharBuffer()中使用了什么?

时间:2011-07-19 15:50:26

标签: java nio

Charset ByteBuffer.asCharBuffer()使用了什么?它似乎将3个字节转换为我的系统中的一个字符。

在相关的说明中,CharsetDecoder与ByteBuffer.asCharBuffer()的关系如何?

UPDATE :关于我正在使用的ByteBuffer的实现,我正在调用ByteBuffer.allocate(1024).asCharBuffer()。我无法评论在幕后使用什么实现。

3 个答案:

答案 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

  1. X-Buffer.java.templateByteBuffer.allocate()映射到Heap-X-Buffer.java.template
  2. Heap-X-Buffer.java.templateByteBuffer.asCharBuffer()映射到ByteBufferAs-X-Buffer.java.template
  3. ByteBuffer.asCharBuffer().toString()调用CharBuffer.put(CharBuffer),但我无法弄清楚这会导致什么
  4. 最终这可能导致Bits.makeChar()定义为:

    static private char makeChar(byte b1, byte b0) {
        return (char)((b1 << 8) | (b0 & 0xff));
    }
    

    但我无法弄清楚如何。