日期:2014-05-20  浏览次数:20845 次

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然后写出去,请问这样做法的利弊。
java nio

------解决方案--------------------
很有可能会分两次write。read这边完整性判断即使你write这边不这样写(直接用Socket的blocking模式)也是需要做的,虽然99.9%的情况下没有问题,而且在Localhost对传的情况下这个比率还会更高,但是这不是一个严密的逻辑。