有没有办法将OutputStream
转换为InputStream
?
以下是可行的
InputStream convertOStoIS(OutputStream os) {
}
我不想使用任何库,我读到有些人能够通过字节码操作来实现这一点。
编辑:
我希望能够与接收器相交,分析数据或重定向输出。我想在一些函数给出的on下放置另一个OutputStream,并将数据重定向到另一个输入流。
相关主题包含ByteArrayOutputStream
或PipedStream
,而我的问题并非如此。
编辑: Downvoters,有两个问题,有几百个upvotes,以及一些关于这个问题的博客文章,如果你没有用例,请不要关注这个问题。
相关:
答案 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
!
这很容易并且按预期工作。无论哪种方式,您都无法更改已连接的流(没有反射)。