当autoRead为false时读取多少数据?

时间:2015-04-08 16:07:59

标签: java netty

read()的Javadoc说:

  

请求将数据从Channel读入第一个入站缓冲区,   如果读取了数据,则触发ChannelInboundHandler#channelRead事件,   并触发一个ChannelInboundHandler#channelReadComplete事件   处理程序可以决定继续阅读。

手动调用channel.config().setAutoRead(false)read()时,实际读取了多少?假设TCP连接没有编解码器,它是否会读入,直到入站缓冲区填满,触发ChannelInboundHandler#channelRead,然后停止读取?

查看proxy example每个channelRead调用read()一次,这似乎意味着read()和channelRead事件之间的一对一。

1 个答案:

答案 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)