java基礎知識回顧之javaIO類--管道流PipedOutputStream和PipedIutputStream

來源:互聯網
上載者:User

標籤:style   blog   color   java   使用   os   io   for   

管道流(線程通訊流):管道流的主要作用是可以進行兩個線程間的通訊,分為管道輸出資料流(PipedOutputStream)、管道輸入資料流(PipedInputStream),如果想要進行管道輸出,則必須要把輸出資料流連在輸入資料流之上。:

       1.管道輸入資料流應該串連到管道輸出資料流 ,輸入資料流和輸出資料流可以直接連接
       2.使用多線程操作,結合線程進行操作。通常由某個線程從管道輸入資料流中(PipedInputStream)對象讀取。
          並由其他線程將其寫入到相應的端到輸出資料流中。不能使用單線程對輸入資料流對象向和輸出資料流對象進行操作,因為會造成 死結問題。
      3.管道流串連:(1)使用構造方法進行串連PipedOutputStream(PipedInputStream snk)  建立串連到指定管道輸入資料流的管道輸出資料流。
                          (2)public void connect(PipedInputStream snk)throws IOException,使用connect方法進行串連

下面看代碼:

package com.lp.ecjtu.io.piped;import java.io.IOException;import java.io.PipedInputStream;import java.io.PipedOutputStream;public class PipedDemo {    public static void main(String[] args) {        PipedOutputStream out = new PipedOutputStream();        PipedInputStream in = new PipedInputStream();        try {            out.connect(in);        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }//輸出管道流串連輸入管道流        new Thread(new OutputThread(out)).start();        new Thread(new InputThread(in)).start();    }}class InputThread implements Runnable{    private PipedInputStream in;    public InputThread(PipedInputStream in){        this.in = in;    }    @Override    public void run() {        // TODO Auto-generated method stub                try {            byte[] buff = new byte[1024];            int len = in.read(buff);            String s = new String(buff,0,len);            System.out.println(s);        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}class OutputThread implements Runnable{    private PipedOutputStream out;    public OutputThread(PipedOutputStream out){        this.out = out;    }    @Override    public void run() {        String str = "hello Piped!";        try {            out.write(str.getBytes());        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }finally{            try {                if(out != null){                    out.close();                }            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }        }            }}

 

 


            

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.