如何解决为进程设置OutputStream
| 这是我的问题的摘录代码:Process process = Runtime.getRuntime().exec(command);
if (process.waitFor() != 0)
throw new Exception(\"error\");
reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
运行过程产生了巨大的产出。如果我将输出重定向到文件,该过程将更快终止,然后在屏幕上打印输出(标准输出)。
由于磁盘性能低下,文件系统权限等,我不希望将输出重定向到文件。
执行process.waitFor()时,Java被阻塞,直到进程(被调用方)终止,这可能需要很长时间。因此,为了绕过此问题,我想将流程的标准输出重定向到阅读器的流输入(代码的最后一行)。即,被调用方应向与阅读器链接的流产生输出,而不是在屏幕上打印输出。
希望我足够清楚。我不知道该怎么办?任何帮助都会很棒。
解决方法
如果您不关心进程的输出,只需重定向到空设备,在Unix上为
> /dev/null
,在Windows上为> NUL
。所有输出将被丢弃,您不必担心文件权限,性能等问题。
如果您确实关心输出,请看一下这篇文章,该文章为您展示使用StreamGobbler
读取进程的stdout / stderr的正确方法。
, 您需要在调用waitFor()之前读取输出。目前,您正在等待它完成,它只能在完成输出后才能执行,而由于您没有读取输出而无法执行,因此它的缓冲区已满并且正在阻塞。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。