※目的地
管道流:主要用于线程之间交互
目的地:线程
管道输入流从一个管理输出流中读取数据。通常由一个线程向管理输出流写数据,由另一个线程从管理输入流中读取数据,两个线程可以用管理来通信。
※ PipedInputStream 从管道中读出数据(线程)
package com.briup.IO;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
public class PipedStreamTest {
public static void main(String[] args) {
PipedOutputStream pos=new PipedOutputStream();
try {
// PipedInputStream pis=new PipedInputStream();
// pis.connect(pos);
PipedInputStream pis=new PipedInputStream(pos);
Thread t=new MyPipedRead("1号:",pis);
Thread t1=new MyPipedWriter("2号:",pos);
t.start();
t1.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class MyPipedRead extends Thread{
//负责从管道中读取消息的
private PipedInputStream pis;
private boolean flag;
public MyPipedRead(String name,PipedInputStream pis) {
super(name);
this.pis=pis;
}
@Override
public void run() {
int len=0;
try {
while(!flag){
len=pis.read();
if(len==38){
break;
}
System.out.println(getName()+":"+len);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class MyPipedWriter extends Thread{
//向管道写消息(字节)
private PipedOutputStream pos;
public MyPipedWriter(String name,PipedOutputStream pos) {
super(name);
this.pos=pos;
}
@Override
public void run() {
byte[] b="hello world&".getBytes();
try {
for(byte bx:b){
pos.write(bx);
pos.flush();
Thread.sleep(1000);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}