java基础知识回顾之javaIO类--管道流PipedOutputStream和PipedIutputStream

管道流(线程通信流):管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(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();

            }

        }

        

    }

}

 

 


            

 

你可能感兴趣的:(java基础知识回顾之javaIO类--管道流PipedOutputStream和PipedIutputStream)