package piped.cn;
import java.io.IOException;
/*
* 管道流:可以进行两个线程之间的通信
* 管道输出流:PipedOutputStream
* 管道输入流 类 PipedInputStream
* 要实现管道输出,则必须将输出流连接在输入流上
*
*/
/* 管道输出流:PipedOutputStream
* 构造方法:
* PipedOutputStream()
创建尚未连接到管道输入流的管道输出流。
主要 方法:
void close()
关闭此管道输出流并释放与此流有关的所有系统资源。
void connect(PipedInputStream snk)
将此管道输出流连接到接收者。
void flush()
刷新此输出流并强制写出所有缓冲的输出字节。
void write(byte[] b, int off, int len)
将 len 字节从初始偏移量为 off 的指定 byte 数组写入该管道输出流。
void write(int b)
将指定 byte 写入传送的输出流。
*
*/
/* 管道输入流 类 PipedInputStream
* 构造方法:
* PipedInputStream()
创建尚未连接的 PipedInputStream。
主要的方法:
int available()
返回可以不受阻塞地从此输入流中读取的字节数。
void close()
关闭此管道输入流并释放与该流相关的所有系统资源。
void connect(PipedOutputStream src)
使此管道输入流连接到管道输出流 src。
int read()
读取此管道输入流中的下一个数据字节。
int read(byte[] b, int off, int len)
将最多 len 个数据字节从此管道输入流读入 byte 数组。
protected void receive(int b)
接收数据字节。
*
*/
public class PipedDemo {
public static void main(String[] args) {
//创建 send receive 对象
Send s = new Send();
Receive r = new Receive ();
//使用 PipedOutputStream 中的 void connect(PipedInputStream snk) 方法连接
try {
s.getPost().connect(r.gitPis());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//开启线程
new Thread(s).start();
new Thread(r).start();
}
}
package piped.cn;
import java.io.IOException;
import java.io.PipedInputStream;
class Receive implements Runnable {
//通过构造函数实例化 管道流输入对象
PipedInputStream pis = null;
//通过构造方法 实例化对象
public Receive(){
pis = new PipedInputStream();
}
public void run(){
//开辟一个存储空间
byte[] by = new byte[1024];
int len = 0 ;
try {
len = pis.read(by);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
pis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("输出的内容为:"+new String(by,0,len));
}
//创建获得线程接收类
public PipedInputStream gitPis(){
return this.pis;
}
}
package piped.cn;
import java.io.IOException;
import java.io.PipedOutputStream;
//创建一个发送信息的线程
class Send implements Runnable{
//输出管道流对象
PipedOutputStream pos = null;
//通过构造函数实例化 管道流输出对象
public Send(){
this.pos = new PipedOutputStream();
}
public void run(){
//定义一个字符串
String str = "hello wangyuanfang,hahahha";
try {
//write()接收的参数类型是byte,所以要转一下
this.pos.write(str.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//关闭流
try {
this.pos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//通过线程类得到输出流
}
public PipedOutputStream getPost(){
return this.pos;
}
}