爲什麼使用過濾器流和在哪裏?我讀過濾流將用於讓所需的信息進入流..是否正確,如果是的話,我們如何從流中過濾,以及它將在哪裏使用?什麼是真正的過濾器流?
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