为什么使用过滤器流和在哪里?我读过滤流将用于让所需的信息进入流..是否正确,如果是的话,我们如何从流中过滤,以及它将在哪里使用?什么是真正的过滤器流?
java.io.Filter ....
我在这里的问题是,它很难理解为什么我们使用的过滤器流,因为我们可以用其他流做大部分的东西,对吧。
为什么使用过滤器流和在哪里?我读过滤流将用于让所需的信息进入流..是否正确,如果是的话,我们如何从流中过滤,以及它将在哪里使用?什么是真正的过滤器流?
java.io.Filter ....
我在这里的问题是,它很难理解为什么我们使用的过滤器流,因为我们可以用其他流做大部分的东西,对吧。
我想你是在谈论java.io.Filter *(如FilterInputStream)。
如果我们谈论FilterInputStream类,它仅仅是一个无用的InputStream的包装。对Filter的方法的每次调用都将简单地调用封装的InputStream上的对应方法。一个人,它是无用的。
想象一下,您需要一个将每个“a”字符转换为“b”的InputStream。你可以扩展FilterInputStream中和覆盖阅读()方法:
// this code has not been tested
class ABFilter extends FilterInputStream {
public ABFilter (InputStream in) {
super(in);
}
@Override
public int read() {
int character = super.read();
if (character == 97)
return 98;
return character;
}
// similarly implement all other "read()" methods
}
现在你可以使用这个流包装任何现有的流:
InputStream streamWithA = ...;
InputStream streamWithoutA = new ABFilter(streamWithA);
需要这些过滤器*类可以扩展类在运行时不知道底层类型。这种模式被称为装饰或包装,
http://en.wikipedia.org/wiki/Decorator_pattern
采取的BufferedInputStream为例。没有包装,你需要为每个InputStream使用多个版本。例如,
BufferedInputStream extends InputStream ...
BufferedFileInputStream extends FileInputStream ...
BufferedByteArrayInputStream extends ByteArrayInputStream ...
与包装物
现在,所有你需要的是
BufferedInputStream extends FilterInputStream ...
这是什么,“过滤器”,你会说什么? 'javax.servlet.Filter'?请指出您正在讨论的API,并且请告知更多关于您的问题/问题的上下文。这太模糊了。 – BalusC 2009-11-11 12:51:34