【发布时间】:2012-08-18 09:12:10
【问题描述】:
我有一个程序通过 Pipe.SourceChannel 将 stdout、stderr 和 stdin 输送到/来自 BytesBuffers。
程序使用选择器注册每个通道。
循环中的程序会周期性地遍历一组 selectedKeys 中的每个键,这些键对应于 stdout、stderr 和 stdin。对于每一个key,它判断key是否有效,是否可读或可写,如果是,则对一个ByteBuffer进行相应的IO操作
我的问题是,当程序开始时,我可以假设一组最初选择的键(对应于 stdin 、 stdout 、 stderr )。
stdin 的密钥是否总是第一个准备好、有效和可读的密钥? 标准输出的密钥能否在标准输入之前准备好、有效且可读?
我问是因为我的程序行为具有随机 IO 行为,而且我猜测我对初始密钥集成员身份的假设是错误的。
提前致谢。
【问题讨论】:
-
@Peter,我的两个问题本来是不同的,我可能没有表达清楚。这里的问题是关于通道变得可读/可写的顺序。您链接到的问题是关于 stdin/stdout/stderr 的通道是否可以在程序执行期间多次打开或关闭。