gpt4 book ai didi

Java 外部进程错误流 readLine() 间歇性阻塞

转载 作者:行者123 更新时间:2023-12-01 12:58:19 25 4
gpt4 key购买 nike

我正在对一个外部 Windows 程序进行 shell 处理,该程序通过重复将新行推送到错误流来更新其进度。

运行时命令提示符看起来像这样:

10% done
10% done
11% done

等等。

我在我的java应用程序中成功地捕获了这个:

Process process = Runtime.getRuntime().exec("my little command");
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String s;
while((s = stdError.readLine())!=null)
{
System.out.println(s);
}

不幸的是,正如您可能已经猜到的,存在一些问题。 stdError.readLine() 会阻塞,直到错误流中存在 +- 4000 字节,然后才在快速 session 中打印每一行,然后再次挂起。

我尝试更改 BufferedReader 缓冲区大小,并使用较小长度的 stdError.read(char [] cbuf, int off, int len)徒劳无功。

如何解决这个挂起问题?

提前致谢:)

最佳答案

The stdError.readLine() blocks until there are +- 4000 bytes in the error stream

不,没有。一旦有一行要读取,它就会返回。

发生的情况是,源进程正在缓冲其输出,显然是 4096 字节的 block 。在 Java 端您对此无能为力。

关于Java 外部进程错误流 readLine() 间歇性阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com