在一项推荐中,我正在尝试将数据发送到 System.out,如下所示:
在另一个命令中,我试图从 System.in 获取这些数据。
这很奇怪,因为它多次尝试一次。我可以尝试运行它 10 次,它仍然是inReader.ready() == false
,当我运行它例如第 11 次时,它可以工作。
为什么 ?我怎样才能解决这个问题?如何让它每次都工作?
提前致谢 !
您无法以这种方式读取 InputStream,因为数据可能尚未到达第二个进程。您可以逐个字符地阅读,例如:
InputStreamReader inReader = new InputStreamReader(System.in);
int data = inReader.read();
while (data != -1){
...
data = inReader.read();
}
或简单地逐行读取输入,使用:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while ((String line = br.readLine()) != null) {
...
}
如果您的目标是执行 shell 命令,请不要使用 System.out 而是使用Runtime.getRuntime().exec(cmd)
。查看这个问题了解更多详情。