Java 将 getOutputStream 处理为字符串

Java Process getOutputStream to String

Java 8 在这里。如何将 Process#getOutputStream() 中的数据读入字符串?我正在尝试从 Java 和 hook/capture 其 STDOUT 内部 运行 一个进程。

Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("consul -v");
String capturedOutput;

OutputStream os = proc.getOutputStream();
capturedOutput = howDoIConvert(os);  // <---- ???

在这里寻找确切的代码(不是像 baos.toString(codepage) 这样模糊的东西。如果我需要礼貌地 close() 任何事情也很感兴趣。

您从 inputStream 而非 outputStream 读取数据。

OutputStream 用于向进程传递数据。

Process 有两个基本输入流。一个用于标准输入,可以用 getInputStream() 检索,另一个用于错误,可以用 getErrorStream()

检索

来自 getInputStream() 的 java 文档:

Returns the input stream connected to the normal output of the subprocess

来自 getErrorStream()

Returns the input stream connected to the error output of the subprocess.

关于流的注意事项: 从 java 程序的角度来看,Process 是一个 外部程序。当您需要向外部程序添加一些输入时,您从 java 写入该程序(因此 java 程序的输出是 Process 的输入)。相反,如果外部程序写了一些东西,你会读它(所以 Process 的输出是 java 程序的输入)。

Java                   Data direction   External Process
_____________________________________________________________

write to OutputStream  ------------>    read from InputStream
read from InputStream  <------------    write to OutputStream