将 OutputStream 转换为 InputStream

converting OutputStream into an InputStream

有什么方法可以将 OutputStream 转换为 InputStream 吗?

所以下面的方法可行

InputStream convertOStoIS(OutputStream os) {

}

我不想使用任何库,我读到有些库可以通过字节码操作来完成。

编辑

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

相关主题有 ByteArrayOutputStreamPipedStream,但我的问题并非如此。

相关:

使用 java.io.FilterOutputStream 包裹现有的 OutputStream。通过覆盖 write() 方法,您可以拦截输出并对其进行任何您想做的事情,将其发送到其他地方、修改它或完全丢弃它。

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

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

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

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