gpt4 book ai didi

java - 如何在没有缓冲的情况下从 Java 中的另一个应用程序读取 STDOUT

转载 作者:可可西里 更新时间:2023-11-01 14:19:24 25 4
gpt4 key购买 nike

我在 Java 中运行一个 C++ 应用程序,该应用程序在运行过程中记录其进度,并希望持续监控是否有一些进展,因此(在 Java 中)我监控 process.getInputStream() 和 process.getErrorStream()。当我从命令行运行 C++ 应用程序时,日志在进行时一次显示一行(大约 1 行每 1-2 秒)。从 Java 监视器中,我没有实时获取数据,也不确定是谁在缓冲它。

我可以查看 C++ 代码(虽然它相当复杂)并尝试根据需要调用 flush(),但是当我从 cmd.exe 运行它时数据会实时显示,所以在我这样做之前,我'我想看看沿途是否还有其他事情需要我做。在 Java 中我必须做些什么来实时获取数据,以确保输入流没有被缓冲?

我在 Windows XP 及更高版本中运行。

我试过了

            for (;;) {
int c = is.read();
if (c < 0) {
break;
}
System.out.print(c);
System.out.flush();
}
if (true) {
return;
}

也尝试过

            InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
synchronized (lastActivityTime) {
lastActivityTime = java.util.Calendar.getInstance().getTimeInMillis();
}
if (pw != null) {
pw.println(type + line);
pw.flush();
}
}

最佳答案

它是在 stdio 库中进行缓冲的源进程。在 Java 端你无能为力。您必须将 fflush() 调用放入 C++ 代码中,或者忍受并等待。当您从 cmd.exe 运行时,数据会实时显示,因为当 stdio 连接到它认为是真实终端的设备时,其行为会有所不同。

关于java - 如何在没有缓冲的情况下从 Java 中的另一个应用程序读取 STDOUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9985370/

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