PipedInputStream类与PipedOutputStream类用于在应用程序中创建管道通信.一个PipedInputStream实例对 象必须和一个PipedOutputStream实例对象进行连接而产生一个通信管道.PipedOutputStream可以向管道中写入数 据,PipedIntputStream可以读取PipedOutputStream向管道中写入的数据.这两个类主要用来完成线程之间的通信.一个线程 的PipedInputStream对象能够从另外一个线程的PipedOutputStream对象中读取数据.
PipedInputStream与PipedOutputStream类的编程实例(两个线程间进行通信的实例程序)
发送者
import java.io.IOException;
import java.io.PipedOutputStream;
import java.util.Scanner;
public class Sender extends Thread {
private PipedOutputStream out = new PipedOutputStream();
public PipedOutputStream getOut(){
return out;
}
public void run(){
System.out.println("请输入您要发送的内容:");
Scanner sc = new Scanner(System.in);
String comtent = sc.next();
//String strInfo = new String("Hello,rec");
try {
//out.write(strInfo.getBytes());
out.write(comtent.getBytes());
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//System.out.println(e);
}
}
}
接收者
import java.io.IOException;
import java.io.PipedInputStream;
public class Receiver extends Thread{
private PipedInputStream in = new PipedInputStream();
public PipedInputStream getIn(){
return in;
}
public void run(){
byte [] buf = new byte[1024];
try {
int len = in.read(buf);
System.out.println("the following message comes form sender:/n"
+new String(buf,0,len));
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
//System.out.println(e);
}
}
}
测试程序
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
public class PipedStreamTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Sender send = new Sender();
Receiver receiv = new Receiver();
PipedOutputStream out = send.getOut();
PipedInputStream in = receiv.getIn();
try {
out.connect(in);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
send.start();
receiv.start();
}
}