read()
的Javadoc说:
请求将数据从Channel读入第一个入站缓冲区, 如果读取了数据,则触发ChannelInboundHandler#channelRead事件, 并触发一个ChannelInboundHandler#channelReadComplete事件 处理程序可以决定继续阅读。
手动调用channel.config().setAutoRead(false)
和read()
时,实际读取了多少?假设TCP连接没有编解码器,它是否会读入,直到入站缓冲区填满,触发ChannelInboundHandler#channelRead
,然后停止读取?
查看proxy example每个channelRead调用read()一次,这似乎意味着read()
和channelRead事件之间的一对一。
答案 0 :(得分:3)
socketChannel添加了一个名为的类 AdaptiveRecvByteBufAllocator,默认值为
static final int DEFAULT_MINIMUM = 64;
static final int DEFAULT_INITIAL = 1024;
static final int DEFAULT_MAXIMUM = 65536;
因此,首先会读取1024 bytes
,然后根据随后的读数增加或减少它。你可以通过添加
socketChannel.config().setRecvByteBufAllocator(RecvByteBufAllocator allocator)