Process.getInputStream()的输出缓冲太长时间

时间:2014-04-03 08:45:16

标签: java inputstream bufferedreader

我有一个使用Process Builder启动外部程序的Java程序。

我有一个带有命令的Process Builder,我使用下面的代码来实现程序。

我想要做的就是像外部程序那样打印输出,我尝试使用以下代码执行此操作:

pb.redirectErrorStream(true);
p = pb.start();
InputStream is = p.getInputStream();
InputStreamReader isr = new inputStreamReader(is);
BufferedReader br = new BufferedReader(isr, 32);
while((line = br.readLine()) != null){
  System.out.println(line);
}

问题是我的程序在外部程序结束之前都是静音的,突然之间所有输出都会立刻出现。或者,如果有更多输出,它可能没有安静,但我希望它产生输出,即无缓冲。

(对我而言)显而易见的问题是BufferedReader及其缓冲区的大小,但问题是我试图拥有一个非常小的缓冲区,但无济于事。 我也试图避免使用BufferedReader,而是直接使用InputStreamReader,但它们也是一样的。

这里的任何人都能理解我的问题,也许有解决方案吗?

2 个答案:

答案 0 :(得分:0)

这是由执行程序中的缓冲引起的,而不是由Java引起的。你无法从Java端做到这一点。

答案 1 :(得分:-2)

这可能会有所帮助 Get Java Runtime Process running in background

在读取外部应用程序的输出时运行线程