Java ByteBuffer.asCharBuffer()使用什么字符集?

Java ByteBuffer.asCharBuffer()使用什么字符集?,java,nio,Java,Nio,什么字符集使用?在我的系统上,它似乎将3个字节转换为一个字符 请注意,与ByteBuffer.asCharBuffer()的关系如何 更新:关于我正在使用的ByteBuffer实现,我正在调用ByteBuffer.allocate(1024).asCharBuffer()。我不能评论在幕后使用了什么实现。对于第一个问题,我相信它使用了Java的本机字符编码(UTF-16)。据我所知,它没有使用任何东西。它只是假设它已经被正确地解码为Java的字符串,这意味着UTF-16。这可以通过查看HeapB

什么字符集使用?在我的系统上,它似乎将3个字节转换为一个字符

请注意,与ByteBuffer.asCharBuffer()的关系如何


更新:关于我正在使用的ByteBuffer实现,我正在调用
ByteBuffer.allocate(1024).asCharBuffer()
。我不能评论在幕后使用了什么实现。

对于第一个问题,我相信它使用了Java的本机字符编码(UTF-16)。

据我所知,它没有使用任何东西。它只是假设它已经被正确地解码为Java的字符串,这意味着UTF-16。这可以通过查看HeapByteBuffer的源代码来显示,返回的charbuffer最终在其中调用(little endian版本):

静态私有字符makeChar(字节b1,字节b0){

返回(char)((b1查看jdk7,
jdk/src/share/classes/java/nio

  • X-Buffer.java.template
    map
    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));
    }
    
    静态私有字符makeChar(字节b1,字节b0){
    
    return(char)((b1
    ByteBuffer
    是一个抽象类,
    asCharBuffer()
    也是抽象的。你使用的是
    ByteBuffer
    的什么子类?@Paul在SDK中找到了ByteBuffer的另一个实现,但HeapByteBuffer在哪里?据我所知只有一个。我想,@vo,因为我碰巧知道他没有使用任何我应该很清楚的外部库。哦,等等,我不知道他在他的代码中使用了什么,这就是为什么我问的原因。@Voo,
    DirectByteBuffer
    也通过
    MappedByteBuffer
    扩展了
    ByteBuffer
    。这样做:
    CharBuffer buff=ByteBuffer.allocate(1024).asCharBuffer();System.out.println(“buff类是=“+buff.getClass().getName());
    我接受你的回答,因为你引用了实际的源代码。什么包是
    HeapByteBuffer
    ?我在JDK 6 API中没有看到它。我看到
    HeadlesException
    后跟
    HexBinaryAdapter
    。我不接受答案,因为源代码在JDK 7中已更改。Paul,你会找到相关的文件在openjdk\jdk\src\share\classes\java\nio中。请参阅
    Heap-X-Buffer.java.template
    ByteBufferAs-X-Buffer.java.template
    @Gili,这如何解释您看到的3字节->1字符转换?@Gili,我没有看到它的原因是包私有的。它在包
    java.nio
    中。与
    DirectByte>相同Buffer
    ,它也扩展了
    ByteBuffer
    bytesbuff.asCharBuffer()
    是否使用UTF-16编码方案将字节解码为unicode?
    static private char makeChar(byte b1, byte b0) {
        return (char)((b1 << 8) | (b0 & 0xff));
    }