在Java I/O中,有兩種類型的流:節(jié)點(diǎn)流(Node Stream)和處理流(Filter Stream)。
節(jié)點(diǎn)流(Node Stream)是直接與數(shù)據(jù)源或數(shù)據(jù)目的地進(jìn)行交互的流。它們提供了與底層數(shù)據(jù)源或數(shù)據(jù)目的地直接進(jìn)行讀寫的能力。節(jié)點(diǎn)流通常與實際的輸入源或輸出目標(biāo)進(jìn)行連接,例如文件、網(wǎng)絡(luò)套接字或內(nèi)存。
處理流(Filter Stream)也稱為包裝流(Wrapper Stream)或裝飾器流(Decorator Stream)。處理流本身并不直接連接到實際的數(shù)據(jù)源或數(shù)據(jù)目的地,而是包裝(或裝飾)其他流,通過添加額外的功能來增強(qiáng)底層流的功能。處理流可以提供緩沖、數(shù)據(jù)轉(zhuǎn)換、加密、壓縮等功能。
主要區(qū)別如下:
1. 功能不同: 節(jié)點(diǎn)流提供了直接讀寫數(shù)據(jù)源或數(shù)據(jù)目的地的能力,而處理流則提供了對底層流的增強(qiáng)功能,以便更方便、高效地處理數(shù)據(jù)。
2. 連接方式不同:節(jié)點(diǎn)流直接連接到實際的數(shù)據(jù)源或數(shù)據(jù)目的地,而處理流則通過包裝(裝飾)其他流來提供額外的功能。處理流通常需要一個底層節(jié)點(diǎn)流作為其構(gòu)造函數(shù)的參數(shù)。
3. 使用方式不同:節(jié)點(diǎn)流可以單獨(dú)使用,直接對數(shù)據(jù)源或數(shù)據(jù)目的地進(jìn)行讀寫操作。處理流必須基于一個底層的節(jié)點(diǎn)流來進(jìn)行包裝,以提供額外的功能。處理流可以通過多次嵌套來構(gòu)建一個流處理管道,從而組合多個功能。
示例代碼如下所示:
// 節(jié)點(diǎn)流的使用示例
InputStream inputStream = new FileInputStream("file.txt");
int data = inputStream.read();
// ...
// 處理流的使用示例
InputStream inputStream = new FileInputStream("file.txt");
BufferedInputStream bufferedInput = new BufferedInputStream(inputStream);
int data = bufferedInput.read();
// ...
在上述示例中,`FileInputStream` 是一個節(jié)點(diǎn)流,直接連接到文件 "file.txt"。而 `BufferedInputStream` 是一個處理流,它包裝了 `FileInputStream`,提供了緩沖的功能。我們通過 `bufferedInput` 對數(shù)據(jù)進(jìn)行讀取。
總結(jié)來說,節(jié)點(diǎn)流直接連接到數(shù)據(jù)源或數(shù)據(jù)目的地,而處理流則提供了對底層流的增強(qiáng)功能。處理流通過包裝其他流來實現(xiàn)額外的功能,并且可以構(gòu)建流處理管道來組合多個功能。