java语言中提供了各种各样的流供我们操纵数据,其中管道流(pipeStream)是一种特殊的流,用于在不同线程间直接传送数据。
一个线程发送数据到输出管道,另一个线程从输入管道读取数据,通过使用管道,实现不同线程间的通信,而无需借助于临时文件之类的东西。
在java jdk中提供了4个类用于线程间通信,分别是字节流和字符流,应用起来大体相同:
1.PipedInputStream和PipedOutputStream
2.PipedReader和PipedWriter
public class WriteData { public void writeMethod(PipedWriter out){ try { System.out.println("write:"); for (int i = 0; i < 100; i++) { String data=""+i; out.write(data); System.out.print(data); } System.out.println(); out.close(); } catch (IOException e) { e.printStackTrace(); } } } public class ReadData { public void readMethod(PipedReader in){ try { System.out.println("read:"); char[] byteArray = new char[20]; int readLength=in.read(byteArray); while (readLength!=-1){ String newData = new String(byteArray, 0, readLength); System.out.print(newData); readLength=in.read(byteArray); } System.out.println(); in.close(); } catch (IOException e) { e.printStackTrace(); } } } public class ThreadWrite extends Thread { private WriteData write; private PipedWriter out; public ThreadWrite(WriteData write, PipedWriter out) { this.write = write; this.out = out; } @Override public void run() { write.writeMethod(out); } } public class ThreadRead extends Thread{ private ReadData read; private PipedReader in; public ThreadRead(ReadData read, PipedReader in) { this.read = read; this.in = in; } @Override public void run() { read.readMethod(in); } } public class Run { public static void main(String[] args) { try { WriteData writeData = new WriteData(); ReadData readData = new ReadData(); PipedWriter pipedWriter = new PipedWriter(); PipedReader pipedReader = new PipedReader(); //通过这一行使得输入流和输出流联系起来 pipedReader.connect(pipedWriter); ThreadWrite threadWrite = new ThreadWrite(writeData, pipedWriter); threadWrite.start(); Thread.sleep(2000); ThreadRead threadRead = new ThreadRead(readData, pipedReader); threadRead.start(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }