如何使用管道流

2021-04-07 07:23:26 字數 1462 閱讀 3641

如何使用管道流?

管道是用來將乙個執行緒的輸出流資訊傳送到另乙個執行緒的輸入流中。

pipedreader

和pipedwriter

(和他們類似的輸入輸出流

pipedinputstream

和pipedoutputstream

) 用來實現乙個管道的輸入和輸出, 為什麼這是有用的呢?

考慮到乙個類可能實現一系列的多樣的處理功能,如排序、反序文字。如果某個方法的輸出能夠做為另乙個方法的輸入,以便於可以把一串行的方法的呼叫串接起來,那麼這樣將可以得到高層次的功能。例如,你可以反序list裡每個文字的位置,然後對這些文字進行排序,再反序每個文本來建立乙個壓韻(可能是按字母順序的意思)的list。

如果沒有管道流,程式在每一步中只能把當前得到的結果儲存在某個臨時的位置(比如檔案或在記憶體中)。如下圖所示:

沒有管道流,程式必須儲存中間結果

通過管道,程式可以把從乙個執行緒傳遞給另乙個。

讓我們來看下這個個程式

rhymingwords

,它實現是上圖所描述得功能。這個程式用管道連線它的反序和排序方法的輸入和輸出流來建立乙個壓韻(可能是按字母順序的意思)的list。這個程式有幾個類組成。

首先,讓我們來看看main方法中反序和排序方法的呼叫順序:

filereader words = new filereader("words.txt");

reader rhymingwords = reverse(sort(reverse(words)));

最裡面是呼叫reverse 方法,並傳遞乙個filereader物件給它。filereader物件是開啟乙個包含一單詞列表的檔案

words.txt

。reverse 的返回結果傳遞給sort, sort的返回結果再傳遞給另乙個reverse 方法。

讓我們看下reverse這個方法;sort方法也是類似的,一旦你理解了reverse方法,你自然而然會理解sort方法。

public static reader reverse(reader src) throws ioexception

黑體字的語句宣告並初始化乙個管道的兩端-- pipedwriter

和pipedreader-- 通過pipedwriter物件的基礎上建立

ipedreader 物件來實現管道的兩端的連線。不管往pipedwriter中寫入什麼,

都能在pipedreader中讀取出來。

管道的連線方法, 如下面的插圖所示

使用pipedwriter 和pipedreader 來構件乙個管道.

reverse 方法通過啟動乙個 reversethread

,把它的輸出(output)

寫到pipedwriter 然後把pipedreader返回給呼叫者。 呼叫者在通過sort

執行緒,從管道中讀取資訊.sort方法除了建立和啟動乙個sortthread外,

和reverse方法是非常象的。

nodejs 流讀寫 管道流

管道提供了乙個輸出流到輸入流的機制。通常我們用於從乙個流中獲取資料並將資料傳遞到另外乙個流中。console.clear console.log 流寫入檔案 var fs require fs 建立乙個可讀流 var readerstream fs.createreadstream input.tx...

oracle 管道流函式

管道流函式 1 先定義 物件類中 比如 create or replace type obj cjgzl is object mjvarchar2 20 民警 sspcsvarchar2 12 派出所 sqdmvarchar2 20 社群 fwslnumber 10 房屋數 czrksnumber ...

多執行緒之管道流

前面執行緒間使用wait notify notifyall 進行同步執行被稱為執行緒間的通訊,不如成為執行緒間協調執行的控制策略。如果需要在兩條執行緒之間進行更多的資訊互動,可以使用管道流進行通訊。管道流是io與執行緒的結合。管道流有 管道位元組流pipedinputstream,pipedoutp...