![](/img/trans.png)
[英]2 consecutive stream-stream inner joins produce wrong results: what does KStream join between streams really do internally?
[英]What really Filter stream do?
為什么使用過濾器流和哪里? 我讀到過濾器流將用於將所需信息放入流中。是否正確,如果是這樣,我們如何從流中過濾以及它將在何處使用?
java.io.Filter ....
我的問題是很難理解為什么我們使用Filter流,因為我們可以使用其他流來完成大部分工作。
我想你在談論java.io.Filter *(比如FilterInputStream)。
如果我們談論FilterInputStream類,它只是一個不執行任何操作的InputStream的包裝器。 每次調用Filter的方法都會簡單地調用包裝的InputStream上的相應方法。 一個人,這是沒用的。
想象一下,你想要一個將每個“a”字符轉換為“b”的InputStream。 您可以擴展FilterInputStream並覆蓋read()方法:
// 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);
需要這些Filter *類才能在運行時擴展類而不知道底層類型。 這種模式稱為裝飾器或包裝器,
http://en.wikipedia.org/wiki/Decorator_pattern
以BufferedInputStream為例。 如果沒有包裝器,每個InputStream都需要多個版本。 例如,
BufferedInputStream extends InputStream ...
BufferedFileInputStream extends FileInputStream ...
BufferedByteArrayInputStream extends ByteArrayInputStream ...
現在有了包裝器,你需要的只是
BufferedInputStream extends FilterInputStream ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.