我有以下用例:
InputStream
InputStream
并替换一些内容,结果存储在OutputStream
InputStream
OutputStream
这是我现在使用的代码:
InputStream resourceStream = service.getStream();
ByteArrayOutputStream output = new ByteArrayOutputStream();
replace(resourceStream, output, ...);
resourceStream.close();
resourceStream = new ByteArrayInputStream(out.toByteArray());
很多转换和转换流,所以我想知道是否有更清洁的解决方案。也许某些OutputStream
可以用作InputStream
,或者OutputStream
包含内容写入的InputStream
。
答案 0 :(得分:1)
无论您想要使用单个对象来编写和读取数据有多好,InputStream
和OutputStream
的实现都是“类”而不是“接口”。
此外,由于在Java中,单个子类无法扩展多个超级类,因此将输入和输出流操作同时放在一个类中的梦想仍然只是一个梦想。
也就是说,程序员唯一的另一个选择是创建一个将InputStream和OutputStream都暴露给客户端的类。与java.net.Socket
类似的东西。它公开了一个getInputStream
和一个getOutputStream
,它在逻辑层读取和写入同一个“套接字”。
所以,你可以这样做:
public class IOStreamWrapper {
byte[] streamData;
public InputStream getInputStream() {
// return an inputstream that reads from streamData[]
}
public OutputStream getOutputStream() {
// return an outputstream that writes to streamData[]
}
}
参考文献:
希望这有帮助!