AdaptiveRecvByteBufAllocator 动态分配buffer大小的类。
如果前一次读取完全填满了分配的缓冲区,它将逐渐增加预期的可读字节数。(增加的方式:初始化类的时候,会预先设置好可以动态增加的值,代码如下:)
static { List<Integer> sizeTable = new ArrayList<Integer>(); for (int i = 16; i < 512; i += 16) { sizeTable.add(i); } for (int i = 512; i > 0; i <<= 1) { sizeTable.add(i); } SIZE_TABLE = new int[sizeTable.size()]; for (int i = 0; i < SIZE_TABLE.length; i ++) { SIZE_TABLE[i] = sizeTable.get(i); } }
数组内存放的值:小于512的值,两个数的差值为16;大于512,值左移1位(相当于乘以2)。
值:16,32,48,64,80,96,112,128,144,160,176,192,208,224,240,256,272,288,304,320,336,352,368,384,400,416,432,448,464,480,496,
512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824
增加和减少的buffer大小,都取决于该数组的值。
如果读取操作不能连续两次填充一定数量的分配缓冲区,则会逐渐减少预期的可读字节数。
否则,它会继续返回相同的预测。