管道流用于线程间的通信。一个线程的PipedInputStream对象从另外一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须同时构造管道输入流和管道输出流。
例如:建立两个线程,一个用于向管道流写入数据,另一个从管道流读取数据。代码如下:
package io.stream; import java.io.PipedInputStream; import java.io.PipedOutputStream; public class PipedInputOutputStreamTest { public static void main(String[] args) { try { // 定义管道流 PipedInputStream input = new PipedInputStream(); PipedOutputStream output = new PipedOutputStream(); // 连接管道 output.connect(input); // 启动线程 (new PipedOutputThread(output)).start(); (new PipedInputThread(input)).start(); } catch(Exception e) { e.printStackTrace(); } } } class PipedInputThread extends Thread { private PipedInputStream input; public PipedInputThread(PipedInputStream input) { this.input = input; } @Override public void run() { try { // 从管道中读取数据 byte[] buffer = new byte[2048]; int len = input.read(buffer); System.out.println( new String(buffer, 0, len) ); } catch(Exception e) { e.printStackTrace(); } } } class PipedOutputThread extends Thread { private PipedOutputStream output; public PipedOutputThread(PipedOutputStream output) { this.output = output; } @Override public void run() { try { String buf = "PipedOutputThread向管道写入数据"; output.write( buf.getBytes() ); } catch(Exception e) { e.printStackTrace(); } } }