簡體   English   中英

真正的過濾流做什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM