我想编写一个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()访问? (特别是当产生的数据量与消耗的数量不同时)
更新
具体应用程序将是作为输入的原始音频流和作为输出的(某种程度上)压缩音频流。
答案 0 :(得分:0)
我认为您的解决方案不需要另一个线程。你所描述的想法会导致像BufferedFilterInputStream这样的东西是完全合法的,但它是一种不同于你想要的东西。
过滤器就像一个代理,它介于两个方面,以透明的方式提供一些额外的功能,所以首先要决定你想要提供什么:)
干杯。
答案 1 :(得分:0)
听起来你需要使用Decorator模式来实现它。请查看http://www.javaworld.com/javaworld/jw-04-2004/jw-0412-decorator.html