java io中的管道為運作在同一個jvm中的兩個線程提供了通信的能力。是以管道也可以作為資料源以及目标媒介。
你不能利用管道與不同的jvm中的線程通信(不同的程序)。在概念上,java的管道不同于unix/linux系統中的管道。在unix/linux中,運作在不同位址空間的兩個程序可以通過管道通信。在java中,通信的雙方應該是運作在同一程序中的不同線程。
可以通過java io中的pipedoutputstream和pipedinputstream建立管道。一個pipedinputstream流應該和一個pipedoutputstream流相關聯。一個線程通過pipedoutputstream寫入的資料可以被另一個線程通過相關聯的pipedinputstream讀取出來。
這是一個如何将pipedinputstream和pipedoutputstream關聯起來的簡單例子:

注:本例忽略了流的關閉。請在處理流的過程中,務必保證關閉流,或者使用jdk7引入的try-resources代替顯示地調用close方法的方式。
你也可以使用兩個管道共有的connect()方法使之相關聯。pipedinputstream和pipedoutputstream都擁有一個可以互相關聯的connect()方法。
請記得,當使用兩個相關聯的管道流時,務必将它們配置設定給不同的線程。read()方法和write()方法調用時會導緻流阻塞,這意味着如果你嘗試在一個線程中同時進行讀和寫,可能會導緻線程死鎖。
除了管道之外,一個jvm中不同線程之間還有許多通信的方式。實際上,線程在大多數情況下會傳遞完整的對象資訊而非原始的位元組資料。但是,如果你需要線上程之間傳遞位元組資料,java io的管道是一個不錯的選擇。