为什么要运行进程需要getErrorStream()?

Kri*_*uts 4 java process

我正在使用Process类执行一个进程.通过错误流似乎有必要成功执行该过程.为什么要经历错误流以使进程正常运行?有什么我做错了吗?

Process wkstdin = Runtime.getRuntime().exec(command);
BufferedWriter wkstdin_writer = new BufferedWriter(
            new OutputStreamWriter(wkstdin.getOutputStream()));
//write data
Run Code Online (Sandbox Code Playgroud)

守则的必要部分:

BufferedReader input = new BufferedReader(new InputStreamReader(
            wkstdin.getErrorStream()));
String ch;
while ((ch = input.readLine()) != null)
{
  System.out.println(ch);
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*hes 5

当进程写入stderr时,输出将转到固定大小的缓冲区.如果缓冲区填满,则进程将阻塞,直到缓冲区中剩余输出有空间.因此,如果缓冲区不为空,则进程将挂起.

此外,如果您想了解它的过程出现问题,错误流可能包含实际有用的信息.

一些建议:

  • 命名一个字符串ch似乎有误导性,因为ch通常用于字符.
  • 我喜欢将从stderr读取的代码放在专用的工作线程中.这样,在读取输入流和错误流之间切换就会自动发生,而不必考虑它.