我可以解复用流吗?

问题描述:

我想将Process的stderr(getErrorStream)和标准输出(getInputStream)加入单个的Stream中,以便在其他地方使用。 Java的库中有什么能为我做到这一点?我可以解复用流吗?

注意:没有外部库。我对Apache Commons IO提供的解决方案的存在并不感兴趣。我只想知道JDK是否有一些东西。

+1

您是否试过[ProcessBuilder.redirectErrorStream()](http://docs.oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html#redirectErrorStream(boolean))? – 2012-02-10 16:43:54

+0

@GabrielBelingueres我认为在这个过程中为时过早。我不认为我可以将决定移交给ProcessBuilder的所有者,但我会研究它。 – 2012-02-10 17:30:36

+0

它是否必须是粗壮和sterr? – 2012-04-03 21:10:36

您可以使用SequenceInputStream合并2个InputStream。

+0

不令人满意 - 这不是解复用,只是序列化。 – 2012-02-10 17:28:13

ProcessBuilder.redirectErrorStream(boolean)做你想做的。

public ProcessBuilder redirectErrorStream(boolean redirectErrorStream)

设置此进程生成的redirectErrorStream财产。

如果此属性是true,然后通过随后通过此对象的start()方法启动子进程生成任何错误输出将与标准输出合并,这样既可以用Process.getInputStream()方法读取。这样可以更容易地将错误消息与相应的输出相关联。初始值为false

编辑:@Since Java 5或更高版本,所以应广泛提供。

+0

不适用于我:两个流都必须生成,分别传递给其他对象,然后最终到达必须加入它们以馈送另一个进程的点。 – 2012-02-10 19:27:44

不,在JDK中没有这样的事情(直到6,7我还没有看过每个类)。