1

这是我的问题的片段代码:

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

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

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

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

4

2 回答 2

1

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

如果您确实关心输出,请查看这篇文章,它向您展示了使用StreamGobbler.

于 2011-05-31T08:58:16.687 回答
0

您需要在调用 waitFor()之前读取输出。目前您正在等待它完成,它只能在它完成生成输出时执行,它不能执行此操作,因为您没有读取输出,因此它的缓冲区已满并且正在阻塞。

于 2011-05-31T23:26:30.000 回答