从
Java开始,我运行一个C应用程序,它在进行过程中记录它的进度,并希望监视持续的进展,因此(在Java中)我监视process.getInputStream()和process.getErrorStream().当我从命令行运行C app时,日志在进行时一次出现一行(大约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附加到它认为是真正的终端时,它的行为会有所不同.