管道流用于线程间的通信。一个线程的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();
}
}
}