将OutputStream转换为InputStream

时间:2018-02-08 18:44:39

标签: java inputstream outputstream

有没有办法将OutputStream转换为InputStream

以下是可行的

InputStream convertOStoIS(OutputStream os) {

}

我不想使用任何库,我读到有些人能够通过字节码操作来实现这一点。

编辑:

我希望能够与接收器相交,分析数据或重定向输出。我想在一些函数给出的on下放置另一个OutputStream,并将数据重定向到另一个输入流。

相关主题包含ByteArrayOutputStreamPipedStream,而我的问题并非如此。

编辑: Downvoters,有两个问题,有几百个upvotes,以及一些关于这个问题的博客文章,如果你没有用例,请不要关注这个问题。

相关:

2 个答案:

答案 0 :(得分:1)

使用java.io.FilterOutputStream打包现有的OutputStream。通过覆盖write()方法,您可以拦截输出并随意执行任何操作,或者将其发送到其他位置,修改它或完全丢弃它。

关于你的第二个问题,你不能在事后更改OutputStream的接收器,即导致先前写入的数据移动到"移动"在其他地方,但使用FilterOutputStream,您可以拦截并重定向包装原始`OutputStream后写入的任何数据。

答案 1 :(得分:0)

要回答我自己的问题,是的,您可以构建这样的重定向:

class OutInInputRedirect {
    public final transient InputStream is;
    public final transient OutputStream os;

    public OutInInputRedirect() throws IOException {
        this(1024);
    }

    public OutInInputRedirect(int size) throws IOException {
        PipedInputStream is = new PipedInputStream(size);
        PipedOutputStream os = new PipedOutputStream(is);

        this.is = is;
        this.os = os;
    }
}

只需使用OutputStream作为替代,并InputStream用于您需要的地方,但是OutputStream的关闭也会关闭InputStream

这很容易并且按预期工作。无论哪种方式,您都无法更改已连接的流(没有反射)。