如何减少InputStreams和OutputStreams之间的写入?

时间:2017-02-16 14:23:03

标签: java stream

我有以下用例:

  • 从服务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

1 个答案:

答案 0 :(得分:1)

无论您想要使用单个对象来编写和读取数据有多好,InputStreamOutputStream的实现都是“类”而不是“接口”。

此外,由于在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[]
    }

}

参考文献:

Java InputStream

Java OutputStream

希望这有帮助!