管道输入/输出流用于线程之间的数据传输,传输的媒介为内存。
4种具体实现:PipedOutputStream、PipedInputStream、PipedReader、PipedWriter前两种面向字节,后两种面向字符。
创建printThread,它用来接受main线程的输入,任何main线程的输入均通过PipedWriter写入,而printThread在另一端通过PipedReader将内容读出并打印。
package thread;
import java.io.PipedReader;
import java.io.PipedWriter;
public class Piped {
public static void main(String[] args) throws Exception {
PipedWriter out=new PipedWriter();
PipedReader in=new PipedReader();
//连接输入输出流
out.connect(in);
Thread printThread = new Thread(new Print(in), "PrintThread");
printThread.start();
int receive=0;
try {
while((receive = System.in.read())!= -1){
out.write(receive);
}
} catch (Exception e) {
}finally {
out.close();
}
}
static class Print implements Runnable{
private PipedReader in;
public Print(PipedReader in){
this.in=in;
}
@Override
public void run() {
int receive = 0 ;
try {
while((receive = in.read())!= -1){
System.out.print((char)receive);
}
} catch (Exception e) {
}
}
}
}
对于Piped类型的流,必须先要进行绑定,也就是调用connect()方法,如果没有将输入/输出流绑定起来,对于该流的访问将会抛出异常。