管道输入流:PipedInputStream
管道输出流:PipedOutputStream
管道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的所有数据字节。
常用方法
PipedInputStream:void connect(PipedOutputStream src):使此管道输入流连接到管道输出流 src。
PipedOutputStream:void connect(PipedInputStream snk):将此管道输出流连接到接收者。
注意: 两个connect()管道连接方法是相同的,等价的。
示例
import java.io.*;
class Read implements Runnable{
private PipedInputStream in;
Read(PipedInputStream in){
this.in=in;
}
public void run(){
try{
byte[] buf=new byte[1024];
System.out.println("读取前。。。没有数据阻塞");
int len=in.read(buf);
System.out.println("读到数据。。。阻塞结束");
String s=new String(buf,0,len);
System.out.println(s);
in.close();
}catch(IOException e){
throw new RuntimeException("管道读取流失败!");
}
}
}
class Write implements Runnable{
private PipedOutputStream out;
Write(PipedOutputStream out){
this.out=out;
}
public void run(){
try{
System.out.println("开始写入数据,等待6秒后。。。");
Thread.sleep(6000);
out.write("piped lai la".getBytes());
out.close();
}catch(Exception e){
throw new RuntimeException("管道输出流失败!");
}
}
}
class PipedStreamDemo{
public static void main(String[] args)throws Exception{
PipedInputStream in = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream();
in.connect(out); // 管道连接
// 开启线程
Read r = new Read(in);
Write w = new Write(out);
new Thread(r).start();
new Thread(w).start();
}
}