Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有缓冲的情况下从Java中的另一个应用程序读取标准输出 ,我运行一个C++应用程序,它记录它的进程,并监视它是否有一些进展,因此(在爪哇)我监视进程。当我从命令行运行C++应用程序时,日志一次出现一行(大约1行1-2秒)。从Java监视器中,我无法实时获取数据,也不确定是谁在缓冲数据 我可以查看C++代码(虽然它相当复杂),并且尝试在必要时放置FrHuffE()调用,但是当我从CMD.EXE运行时,数据会实时出现,所以在我这样做之前,我想看看是否还有其他的事情要做。在Java中,我是否需要做一些事情来实时获取数据,以确保输入流没有缓冲_Java_Windows - Fatal编程技术网

如何在没有缓冲的情况下从Java中的另一个应用程序读取标准输出 ,我运行一个C++应用程序,它记录它的进程,并监视它是否有一些进展,因此(在爪哇)我监视进程。当我从命令行运行C++应用程序时,日志一次出现一行(大约1行1-2秒)。从Java监视器中,我无法实时获取数据,也不确定是谁在缓冲数据 我可以查看C++代码(虽然它相当复杂),并且尝试在必要时放置FrHuffE()调用,但是当我从CMD.EXE运行时,数据会实时出现,所以在我这样做之前,我想看看是否还有其他的事情要做。在Java中,我是否需要做一些事情来实时获取数据,以确保输入流没有缓冲

如何在没有缓冲的情况下从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(); }

我运行的是Windows XP及以上版本

我试过了

            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();
                }
            }