2014-06-17 130 views
0

我想在java中使用Processbuilder运行Linux进程,然后读取输入和错误流。 Linux进程是一个阻塞的进程,并将输出写入控制台/标准输出。读取java进程的输入流

当我尝试读取java进程的输入流(错误流重定向)时,在进程写入高达4K字节之前,我没有数据。一旦过程输出达到此限制,我就可以在输入流中获得数据。如何改变这种行为并从输入流实时获取数据,而不是等到4K。

这里是我的尝试:

process = new ProcessBuilder().command("some daemon program", "arg1").start(); 

InputStreamReader isr = new InputStreamReader(is); 

BufferedReader br = new BufferedReader(isr); 

String line = null; 

while ((line = br.readLine()) != null) 

    System.out.println(line); 

我只后获取可用的数据输入流中〜4K字节。有任何想法吗???

回答

0

这是缓冲在生产过程中。在Java端没有什么可以做的。

+0

在命令行界面中运行的同一个c程序,即使只有100个字节也会立即输出。但是,当使用java运行时,问题就出现了。 – user3741466

+0

不可以。当它的输出运行到管道而不是控制台时,stdio线路缓冲不再发生。 Java与它无关。 – EJP