IntBlockPool与ByteBlockPool结构基本一致,只不过数组元素由byte变为int。其读写由两个内部类对象来完成,分别是SliceWriter和SliceReader。
IntBlockPool在连接slice链表时,有如下代码:
//获得结束符,为当前层数
final int level = slice[sliceOffset];//当前层数
//level-1为下标,得到下层
final int newLevel = NEXT_LEVEL_ARRAY[level-1];
//获得下层大小
final int newSize = LEVEL_SIZE_ARRAY[newLevel];
然而
private final static int[] NEXT_LEVEL_ARRAY = {1, 2, 3, 4, 5, 6, 7, 8, 9, 9};
可以看出NEXT_LEVEL_ARRAY [level-1] = level;
所以其结束符卡在1,size卡在4,size: 2 -> 4 -> 4…结束符:1->1->1…
bug还是有意为之?