package piped.cn; import java.io.IOException; /* * 管道流:能夠進行兩個線程之間的通訊 * 管道輸出流:PipedOutputStream * 管道輸入流 類 PipedInputStream * 要實現管道輸出,則必須將輸出流鏈接在輸入流上 * */ /* 管道輸出流:PipedOutputStream * 構造方法: * PipedOutputStream() 建立還沒有鏈接到管道輸入流的管道輸出流。 主要 方法: void close() 關閉此管道輸出流並釋放與此流有關的全部系統資源。 void connect(PipedInputStream snk) 將此管道輸出流鏈接到接收者。 void flush() 刷新此輸出流並強制寫出全部緩衝的輸出字節。 void write(byte[] b, int off, int len) 將 len 字節從初始偏移量爲 off 的指定 byte 數組寫入該管道輸出流。 void write(int b) 將指定 byte 寫入傳送的輸出流。 * */ /* 管道輸入流 類 PipedInputStream * 構造方法: * PipedInputStream() 建立還沒有鏈接的 PipedInputStream。 主要的方法: int available() 返回能夠不受阻塞地今後輸入流中讀取的字節數。 void close() 關閉此管道輸入流並釋放與該流相關的全部系統資源。 void connect(PipedOutputStream src) 使此管道輸入流鏈接到管道輸出流 src。 int read() 讀取此管道輸入流中的下一個數據字節。 int read(byte[] b, int off, int len) 將最多 len 個數據字節今後管道輸入流讀入 byte 數組。 protected void receive(int b) 接收數據字節。 * */ public class PipedDemo { public static void main(String[] args) { //建立 send receive 對象 Send s = new Send(); Receive r = new Receive (); //使用 PipedOutputStream 中的 void connect(PipedInputStream snk) 方法鏈接 try { s.getPost().connect(r.gitPis()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //開啓線程 new Thread(s).start(); new Thread(r).start(); } }
package piped.cn; import java.io.IOException; import java.io.PipedInputStream; class Receive implements Runnable { //經過構造函數實例化 管道流輸入對象 PipedInputStream pis = null; //經過構造方法 實例化對象 public Receive(){ pis = new PipedInputStream(); } public void run(){ //開闢一個存儲空間 byte[] by = new byte[1024]; int len = 0 ; try { len = pis.read(by); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { pis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("輸出的內容爲:"+new String(by,0,len)); } //建立得到線程接收類 public PipedInputStream gitPis(){ return this.pis; } }
package piped.cn; import java.io.IOException; import java.io.PipedOutputStream; //建立一個發送信息的線程 class Send implements Runnable{ //輸出管道流對象 PipedOutputStream pos = null; //經過構造函數實例化 管道流輸出對象 public Send(){ this.pos = new PipedOutputStream(); } public void run(){ //定義一個字符串 String str = "hello wangyuanfang,hahahha"; try { //write()接收的參數類型是byte,因此要轉一下 this.pos.write(str.getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //關閉流 try { this.pos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //經過線程類獲得輸出流 } public PipedOutputStream getPost(){ return this.pos; } }