疑问
在如下代码示例中,我们经常使用channel().writeAndFlush()来返回数据,同时有一个同名方法ChannelHandlerContext.writeAndFlush(),从使用上来说,两者都是将数据写回channel,但是两者有没有什么区别呢?
@Override
protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
System.out.println(ctx.channel().remoteAddress() + ":" + msg);
//返回数据
ctx.channel().writeAndFlush("from server:" + UUID.randomUUID());
ctx.writeAndFlush(new Object());
}
源码分析
两者最终都是调用了AbstractChannelHandlerContext类中的如下方法:
@Override
public ChannelFuture writeAndFlush(Object msg, ChannelPromise promise) {
write(msg, true, promise);
return promise;
}
继续往下跟踪write()方法: