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