java - Java中unix命令之间的通信

标签 java unix stream command pipe

在一次推荐中,我尝试将数据发送到 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) {
    ...
}

关于java - Java中unix命令之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13320971/

相关文章:

java - 项目制作jar文件后出错

bash - 两个文件夹中的差异文件忽略第一行

unix - 检查用户在 UNIX 中输入的日期和时间

node.js - 如何在异步调用后通过管道传输流而不丢失数据?

java - 具有更好压缩比的 GZIPInput/OutputStream 替代方案?

java - CAS 单点登录过滤器

java - 在java中移动 namespace

java - 插件 View 图标无法正确显示

linux - 使用 [! -d "$DIR"]

java - 无法在 Linux Java 上识别 CRLF