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

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,想请教一下高手,什么情况下会有这样自动扩容?


德玛西亚99
浏览 201回答 1
1回答

一只斗牛犬

根据编码器回馈结果cr如果出现结果溢出overflow时(初次以编码字节平均占字符数(averageCharsPerByte)计算出的空间不够时),新空间翻倍加1,为防止过程中n=0,翻倍2*n还是0,所以加1(初次以编码字节平均占字符数(averageCharsPerByte)计算出的空间不够时), 即n不够时,溢出,比如有10个byte的utf8,3个汉字一个字母, 需要4个字符空间,如果n只有3个就需要扩容.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
Oracle