没有注释掉cbuff.flip() ;这一句
import java.nio.charset.Charset ;
import java.nio.charset.CharsetEncoder ;
import java.nio.charset.CharsetDecoder ;
import java.nio.CharBuffer ;
import java.nio.ByteBuffer ;
import java.nio.charset.CharacterCodingException ;
public class Test
{
public static void main(String args[]) throws CharacterCodingException
{
Charset cn = Charset.forName("GBK") ;
CharsetEncoder cnEncoder = cn.newEncoder() ;
CharsetDecoder cnDecoder = cn.newDecoder() ;
CharBuffer cbuff = CharBuffer.allocate(8) ;
cbuff.put('哈') ;
cbuff.put('哈') ;
cbuff.put('哈') ;
cbuff.flip() ;
ByteBuffer bbuff = cnEncoder.encode(cbuff) ;
System.out.println(bbuff.capacity()) ;
System.out.println(bbuff.limit()) ;
}
}
最后两句输出的capacity和limit就是6 ,这个我理解,
但是我如果注释掉cbuff.flip()这一句,最后两句输出的capacity和limit分别是10和5, 我想了一下, charbuffer分了8个字符的缓冲区, 占用了3个, 剩下的5个,用encode()编码成了bytebuffer,capacity是10, 但是limit为什么会是capacity的一半?这个的理由是什么呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
认证0级讲师