为了账号安全,请及时绑定邮箱和手机立即绑定

如图所示,请问关于Java Charset.decode()方法 自动扩容问题

如图所示,请问关于Java Charset.decode()方法 自动扩容问题

德玛西亚99 2022-03-03 07:07:31
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个就需要扩容.


查看完整回答
反对 回复 2022-03-07
  • 1 回答
  • 0 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号