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(); } } }