将 OutputStream 转换为 InputStream
converting OutputStream into an InputStream
有什么方法可以将 OutputStream
转换为 InputStream
吗?
所以下面的方法可行
InputStream convertOStoIS(OutputStream os) {
}
我不想使用任何库,我读到有些库可以通过字节码操作来完成。
编辑
我希望能够与接收器相交,以分析数据或重定向输出。我想在某个函数给出的 on 下放置另一个 OutputStream,并将数据重定向到另一个输入流。
相关主题有 ByteArrayOutputStream
或 PipedStream
,但我的问题并非如此。
相关:
- How to convert OutputStream to InputStream?
- Most efficient way to create InputStream from OutputStream
使用 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
!
这很容易,并且按预期工作。无论哪种方式,您都无法更改已连接的流(没有反射)。
有什么方法可以将 OutputStream
转换为 InputStream
吗?
所以下面的方法可行
InputStream convertOStoIS(OutputStream os) {
}
我不想使用任何库,我读到有些库可以通过字节码操作来完成。
编辑
我希望能够与接收器相交,以分析数据或重定向输出。我想在某个函数给出的 on 下放置另一个 OutputStream,并将数据重定向到另一个输入流。
相关主题有 ByteArrayOutputStream
或 PipedStream
,但我的问题并非如此。
相关:
- How to convert OutputStream to InputStream?
- Most efficient way to create InputStream from OutputStream
使用 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
!
这很容易,并且按预期工作。无论哪种方式,您都无法更改已连接的流(没有反射)。