管道输出到多个OutputStream的正确方法是什么?

时间:2015-06-02 07:08:56

标签: java groovy outputstream

我想将OutputStream传递给多个接收OutputStream的人。是否有开箱即用的支持,或者比我的解决方案更简单的实现方法?

为了论证,我想将运行ls /tmp的输出管道传输到System.outByteArrayOutputStream

我目前的解决方案:

我创建了一个MultiOutputStream类,以委托给多个OutputStream。是否有更简单/首选的方法来实现相同的结果?

class MultiOutputStream extends OutputStream {

    List<OutputStream> streams

    MultiOutputStream(List<OutputStream> streams = []) {
        this.streams = streams
    }

    @Override
    void write(int b) throws IOException {
        streams.each { it.write(b) }
    }

}

示例中的用法:

def baos = new ByteArrayOutputStream()
def proc = 'ls /tmp'.execute()
proc.waitForProcessOutput(
        new MultiOutputStream([System.out, baos]),
        System.err
)
proc.waitForOrKill(5000)
println "Do something with this -> " + new String(baos.toByteArray())

0 个答案:

没有答案