如何在没有缓冲的情况下从Java中的另一个应用程序读取标准输出 ,我运行一个C++应用程序,它记录它的进程,并监视它是否有一些进展,因此(在爪哇)我监视进程。当我从命令行运行C++应用程序时,日志一次出现一行(大约1行1-2秒)。从Java监视器中,我无法实时获取数据,也不确定是谁在缓冲数据 我可以查看C++代码(虽然它相当复杂),并且尝试在必要时放置FrHuffE()调用,但是当我从CMD.EXE运行时,数据会实时出现,所以在我这样做之前,我想看看是否还有其他的事情要做。在Java中,我是否需要做一些事情来实时获取数据,以确保输入流没有缓冲
我运行的是Windows XP及以上版本 我试过了如何在没有缓冲的情况下从Java中的另一个应用程序读取标准输出 ,我运行一个C++应用程序,它记录它的进程,并监视它是否有一些进展,因此(在爪哇)我监视进程。当我从命令行运行C++应用程序时,日志一次出现一行(大约1行1-2秒)。从Java监视器中,我无法实时获取数据,也不确定是谁在缓冲数据 我可以查看C++代码(虽然它相当复杂),并且尝试在必要时放置FrHuffE()调用,但是当我从CMD.EXE运行时,数据会实时出现,所以在我这样做之前,我想看看是否还有其他的事情要做。在Java中,我是否需要做一些事情来实时获取数据,以确保输入流没有缓冲,java,windows,Java,Windows,我运行的是Windows XP及以上版本 我试过了 for (;;) { int c = is.read(); if (c < 0) { break; } System.out.print(c); System.out.flush(); }
for (;;) {
int c = is.read();
if (c < 0) {
break;
}
System.out.print(c);
System.out.flush();
}
if (true) {
return;
}
是源进程在
stdio
库中进行缓冲。在Java端,您对此无能为力。你必须把代码> FFLUHUE()/CUT>调用到C++代码中,或者忍受它,然后等待。当您从cmd.exe运行时,数据会实时显示,因为stdio在连接到它认为是真正的终端时表现不同。您应该在主应用程序中发布I put _fflushall()调用,它现在可以正常工作了。我不确定我是否能在Java方面做些什么。谢谢。我刚刚学会了“接受答案”,现在我要回到以前的帖子上去做。很抱歉,迟来的确认!
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();
}
}