Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Netty用户指南中调用ctx.write()后,为什么不调用ctx.flush()?_Java_Netty - Fatal编程技术网

Java 在Netty用户指南中调用ctx.write()后,为什么不调用ctx.flush()?

Java 在Netty用户指南中调用ctx.write()后,为什么不调用ctx.flush()?,java,netty,Java,Netty,在nettyJava文档中说,所以当您想要请求刷新时,一定要调用flush(),但是在本例中,它说不需要调用ctx.flush()。但是我没有发现flush(ChannelHandlerContext-ctx)被称为它所说的那样 package io.netty.example.time; public class TimeEncoder extends ChannelOutboundHandlerAdapter { @Override public void write(Ch

netty
Java文档中说,
所以当您想要请求刷新时,一定要调用flush()
,但是在本例中,它说不需要调用
ctx.flush()
。但是我没有发现flush(ChannelHandlerContext-ctx)被称为它所说的那样

package io.netty.example.time;

public class TimeEncoder extends ChannelOutboundHandlerAdapter {
    @Override
    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) {
        UnixTime m = (UnixTime) msg;
        ByteBuf encoded = ctx.alloc().buffer(4);
        encoded.writeInt((int)m.value());
        ctx.write(encoded, promise); // (1)
    }
}
其次,我们没有调用ctx.flush()。有一个单独的处理程序方法void flush(ChannelHandlerContext ctx),用于重写flush()操作

缓冲的意义在于,您将一组数据“收集”在一起,然后一次发送所有数据,因为发送大量数据的速度与发送少量数据的速度大致相同(因为IO速度较慢)

这是分配一个4字节的缓冲区。如果你每4个字节刷新一次,效率就不高了


在某个地方会有一个刷新,但不是在这个特定的方法中。

如果最后有3个字节,它们会被发送出去吗?我注意到在4.0中新的和值得注意的地方,
write()不会自动刷新。