private final class HandleImpl extends MaxMessageHandle { @Override public void lastBytesRead(int bytes) { // bytes 为本次从 socket 中真实读取的数据大小 // attemptedBytesRead 为 ByteBuf 可写的容量大小,初始为 2048 if (bytes == attemptedBytesRead()) { // 如果本次读取 socket 中的数据将 ByteBuf 装满了 // 那么就对 ByteBuf 进行扩容,在下一次读取的时候用更大的 ByteBuf 去读 record(bytes); } // 记录本次从 socket 中读取的数据大小 super.lastBytesRead(bytes); } }www.laipuhuo.com/goodsDetail… www.laipuhuo.com/goodsDetail… www.laipuhuo.com/goodsDetail… www.laipuhuo.com/goodsDetail… www.laipuhuo.com/goodsDetail… www.laipuhuo.com/goodsDetail… www.laipuhuo.com/goodsDetail…
private final class HandleImpl extends MaxMessageHandle { @Override public void readComplete() { // 是否对 ByteBuf 进行扩容或者缩容 record(totalBytesRead()); } }
public class AdaptiveRecvByteBufAllocator { // 扩容步长 private static final int INDEX_INCREMENT = 4; // 缩容步长 private static final int INDEX_DECREMENT = 1;
// ByteBuf分配容量表(扩缩容索引表)按照表中记录的容量大小进行扩缩容
private static final int[] SIZE_TABLE;
}