管道输入/输出流和普通 的文件输入/输出注或者网络输入/输出流不同之处在于,它主要用于线程之间的数据传输,而传输的媒介为内存。
对于Piped类型的流,必须先要进行绑定,也就是调用connect()方法,如果没有将输入/输出流绑定起来,对于该流的访问将会抛出异常。
import java.io.IOException; import java.io.PipedReader; import java.io.PipedWriter; /** * @author sun * @date 2019/8/6 */ public class PipedDemo { static class PipedReaderThread implements Runnable{ private PipedReader in; public PipedReaderThread(PipedReader in){ this.in=in; } @Override public void run() { int recevice=0; try{ while ((recevice=in.read())!=11){//结束条件 System.out.println(recevice); } }catch (IOException e){ e.printStackTrace(); }finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } } static class PipedWriterThread implements Runnable{ private PipedWriter out; public PipedWriterThread( PipedWriter out){ this.out=out; } public void run(){ try { for(int i=0;i<10;i++) out.write(i);//赋值输出 out.write(11); } catch (IOException e) { e.printStackTrace(); }finally { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) { PipedWriter out = new PipedWriter(); PipedReader in = new PipedReader(); try { out.connect(in); Thread t1= new Thread(new PipedWriterThread(out),"pipedOut"); Thread t2= new Thread(new PipedReaderThread(in),"pipedIn"); t1.start(); t2.start(); } catch (IOException e) { e.printStackTrace(); } } }