0

我有一个程序通过 Pipe.SourceChannel 将标准输出、标准错误和标准输入管道传输到/从 BytesBuffers。

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

循环中的程序会周期性地遍历一组 selectedKeys 中的每个键,这些键对应于 stdout、stderr 和 stdin。对于每一个key,它会判断key是否有效,是否可读或可写,如果是,则对一个ByteBuffer进行相应的IO操作

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

标准输入的密钥是否总是第一个准备好、有效和可读的密钥?标准输出的密钥能否在标准输入之前准备好、有效且可读?

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

提前致谢。

4

1 回答 1

0

当有数据可以在没有阻塞的情况下读取时,通道是可读的。

通道是可写的,除非它们的内核套接字发送缓冲区没有空间,只有当它们的写入速度快于阅读器的读取速度时才会发生这种情况。

于 2012-08-18T01:12:10.423 回答