NIO直接从readable里面write
如果从selector里面接到readable key以后,读完了以后直接写出去还不将它改成writable这样好吗?
比如:
public void read(SelectionKey key) throws IOException {
SocketChannel clntChan = (SocketChannel) key.channel();
ByteBuffer buffer = ByteBuffer.allocate(128);
clntChan.read(buffer);
buffer.flip();
clntChan.write(buffer);
}
这样直接把信息echo回去,而不通过把它改成writable,所以整个过程不判断有没有writable的key。如果要是发给指定channel的话可以直接从一个collection里面调出这个channel然后写出去,请问这样做法的利弊。
------解决方案--------------------很有可能会分两次write。read这边完整性判断即使你write这边不这样写(直接用Socket的blocking模式)也是需要做的,虽然99.9%的情况下没有问题,而且在Localhost对传的情况下这个比率还会更高,但是这不是一个严密的逻辑。