java NIO,selectedKeys和STDIN,STDOUT,STDERR的通道

时间:2012-08-17 23:26:15

标签: java nio

我有一个程序通过Pipe.SourceChannel管道stdout,stderr和stdin来自/来自BytesBuffers。

程序使用选择器注册每个通道。

循环中的程序周期性地遍历selectedKeys集合中的每个键,这些键对应于stdout,stderr和stdin。对于每个密钥,它确定密钥是否有效,可读或可写,如果是,它会对ByteBuffer进行相应的IO操作

我的问题是,当程序开始时,我可以假设最初选择的键集合(对应于stdin,stdout,stderr)。

stdin的密钥是否始终是第一个准备好,有效且可读的密钥? stdout的密钥可以在 stdin之前准备好,有效且可读吗?

我问,因为我的程序行为具有随机IO行为,我猜测我对初始密钥集成员资格的假设是错误的。

提前致谢。

1 个答案:

答案 0 :(得分:0)

当有数据可以无阻塞地读取时,通道是可读的。

当内核套接字发送缓冲区没有空间时,通道可以写,只有当它们的写入速度超过读者读取时才会发生。