管道流

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; 
  }
}
相關文章
相關標籤/搜索