管道流(线程通信流)
管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream)、管道输入流(PipedInputStream),如果想要进行管道输出,则必须要把输出流连在输入流之上,在PipedOutputStream类上有如下的一个方法用于连接管道:
public void connect(PipedInputStream snk)throws IOException
例子:线程之间用管道流进行通讯
1 import java.io.IOException;
2 import java.io.PipedInputStream;
3 import java.io.PipedOutputStream;
4
5 class Send implements Runnable{
6
7 private PipedOutputStream pos;//管道输出流
8 public Send(){
9 pos=new PipedOutputStream();
10 }
11 @Override
12 public void run() {
13 String str="Hello World!";
14 try {
15 pos.write(str.getBytes());
16 } catch (IOException e) {
17 e.printStackTrace();
18 }
19 try {
20 pos.close();
21 } catch (IOException e) {
22 e.printStackTrace();
23 }
24 }
25 public PipedOutputStream getPos() {
26 return pos;
27 }
28 }
29
30 class Receive implements Runnable{
31
32 private PipedInputStream pis;//管道输入流
33 public Receive(){
34 pis=new PipedInputStream();
35 }
36 @Override
37 public void run() {
38 byte[] b=new byte[1024];
39 int len=0;
40 try {
41 len=pis.read(b);
42 } catch (IOException e) {
43 e.printStackTrace();
44 }
45 try {
46 pis.close();
47 } catch (IOException e) {
48 e.printStackTrace();
49 }
50 System.out.println(new String(b,0,len));
51 }
52 public PipedInputStream getPis() {
53 return pis;
54 }
55 }
56
57 public class Test23 {
58 public static void main(String[] args) {
59 Send send=new Send();
60 Receive receive=new Receive();
61 try {
62 send.getPos().connect(receive.getPis());//连接管道
63 } catch (IOException e) {
64 e.printStackTrace();
65 }
66 new Thread(send).start();//启动线程
67 new Thread(receive).start();//启动线程
68 }
69 }