ByteBuffer byteBuffer = ByteBuffer.allocate(20);FileChannel channel = new FileInputStream(PATH).getChannel();channel.read(byteBuffer);byteBuffer.clear();CharBuffer buffer = Charset.defaultCharset().decode(byteBuffer);通过上述代码得到的CharBuffer的容量是21,比byteBuffer要大,查看decode方法的源码:看不懂,其中有一句代码是2n * 1,想请教一下高手,什么情况下会有这样自动扩容?
1 回答

一只斗牛犬
TA贡献1784条经验 获得超2个赞
根据编码器回馈结果cr如果出现结果溢出overflow时
(初次以编码字节平均占字符数(averageCharsPerByte)计算出的空间不够时),
新空间翻倍加1,为防止过程中n=0,翻倍2*n还是0,所以加1
(初次以编码字节平均占字符数(averageCharsPerByte)计算出的空间不够时), 即n不够时,溢出,比如有10个byte的utf8,3个汉字一个字母, 需要4个字符空间,如果n只有3个就需要扩容.
添加回答
举报
0/150
提交
取消