pipedinputstream和pipedoutputstream类用于在应用程序中创建管道通信,经常成对出现,主要应用于线程间的通信,一个线程可以从另一个线程中获取数据,可以再线程之间输入输出;如下面的例子所示,是将一个字符从一个线程中写出,另外一个线程接收然后打印:
public class PipedTest {
public static void main(String[] args) throws IOException {
PipedInputStream intput=receiver.getin();
PipedOutputStream output=sender.getout();
intput.connect(output);//管道相连接,也可以反过来使用;
sender t1=new sender();
receiver t2=new receiver();
//启动线程
t1.start();
t2.start();
}
}
//发送字符串
class sender extends Thread{
private static PipedOutputStream out=new PipedOutputStream();
public static PipedOutputStream getout(){
return out;
}
public void run(){
String str="hello receiver";
byte[] buff=new byte[1024];
buff=str.getBytes();
try {
out.write(buff);//将字节数组中的内容写入到输出流中
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//发送字符串
class receiver extends Thread{
private static PipedInputStream in=new PipedInputStream();
public static PipedInputStream getin(){
return in;
}
public void run(){
byte[] buff=new byte[1024];
try {
int len=in.read(buff);//从输入流中读取内容到缓冲区中
System.out.println("the follwing stirng come from the sender:\n"+
new String(buff,0,len));
} catch (IOException e) {
e.printStackTrace();
}
}
}