SC-202004030939_20200831-潘旭
日志
问题:
问题内容:设计字符缓冲区这里,容量变化和削减的地方有点混乱。这地方刚开始我以为只有两部分的长度的变化,认真读了代码后,实际上是三部分的长度变化,buffer.length 、 chars.length、 s(string).length , buffer.length对应的是缓冲区数组的长度,而buffer.length + chars.length 的长度( 操作后数组的长度 )大于缓冲区的长度的90%时,才需要扩充。
削减是为了减小内存的占用过大,容量的扩过大会浪费内存 。
我对字符缓冲区的理解就是,缓冲区暂时存放需要被操作的数组,必须保证缓冲区的长度一定大于被操作的数组的长度,必要时还需要缓冲区自己扩大自己的容量,对被操作的的数组操作后,返回一个新的数组。
public CharacterBuffer append( Object o ) {
String s = String.valueOf( o );
char[] chars = s.toCharArray();
final int n = chars.length ; // 记录被添加的字符个数
int newLength = count + n ;
if( newLength >= buffer.length * 0.9 ) {
int length = Math.max( buffer.length , newLength );
this.ensureCapacity( length * 3 / 2 + 1 ); //Capacity 容量
}
System.arraycopy( chars , 0 , buffer , count , n );
count += n ;
return this ;
}
public void trimToSize() { //trim 削减
buffer = Arrays.copyOf( buffer , count );
}
问题来源:老师所讲内容
解决问题:仔细图代码后明白了。
吐槽:
没有可吐槽的!
点赞