Java - 编写FilterInputStream

时间:2013-12-11 10:41:17

标签: java multithreading inputstream

我想编写一个InputStream,它从另一个InputStream获取输入并对其执行某些操作。我发现FilterInputStream提供了我正在寻找的东西。

那么在编写自己的FilterInputStream时最好的做法是什么?标准实现只是将所有读取请求传递给原始InputStream。所以我会有这样的事情:

public class MyFilterInputStream extends FilterInputStream {

  public MyFilterInputStream(InputStream inputStream) {
    super(inputStream);
  }

  public int read() {
    int i = in.read();
    int j = doSomething(i);
    return j;
  }
  ...
}

使用多线程方法会更好吗,例如,一个线程经常从中读取并将数据存储在缓冲区中,然后由MyFilterInputStream.read()访问? (特别是当产生的数据量与消耗的数量不同时)

更新

具体应用程序将是作为输入的原始音频流和作为输出的(某种程度上)压缩音频流。

2 个答案:

答案 0 :(得分:0)

我认为您的解决方案不需要另一个线程。你所描述的想法会导致像BufferedFilterInputStream这样的东西是完全合法的,但它是一种不同于你想要的东西。

过滤器就像一个代理,它介于两个方面,以透明的方式提供一些额外的功能,所以首先要决定你想要提供什么:)

干杯。

答案 1 :(得分:0)

听起来你需要使用Decorator模式来实现它。请查看http://www.javaworld.com/javaworld/jw-04-2004/jw-0412-decorator.html