为进程设置OutputStream

时间:2011-05-31 08:44:09

标签: java inputstream outputstream output-buffering

以下是我的问题的剪辑代码:

Process process = Runtime.getRuntime().exec(command);
    if (process.waitFor() != 0)
        throw new Exception("error");
    reader = 
        new BufferedReader(new InputStreamReader(process.getInputStream()));

正在运行的过程正在产生巨大的输出。如果我将输出重定向到文件,则该过程会更快地终止,然后在屏幕上打印输出(标准输出)。 由于磁盘性能低,文件系统权限等原因,我不希望将输出重定向到文件。

当执行process.waitFor()时,Java被阻塞,直到进程(被调用者)终止,这可能需要很长时间。因此,为了绕过这个问题,我想将进程的标准输出重定向到读者的流输入(代码的最后一行)。即,被叫方应该向与阅读器链接的流产生输出,而不是在屏幕上打印输出。

希望我足够清楚。我想知道我该怎么做?任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

如果您不关心进程的输出,只需重定向到Unix上的> /dev/null或Windows上的> NUL的空设备。所有输出都将被丢弃,您不必担心文件权限,性能等。

如果您关心输出,请查看this post,其中显示了使用StreamGobbler读取流程的stdout / stderr的正确方法。

答案 1 :(得分:0)

您需要在调用waitFor()之前读取输出。在你等待它完成的那一刻,它只能在它完成输出时才会这样做,这是因为你没有读取输出而无法做到这一点,所以它的缓冲区已满并且它正在阻塞。