<pre name="code" class="html"><pre name="code" class="html">import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
/*
* 管道流:
* PipedInputStream
* 管道输入流应该连接到管道输出流;
* 管道输入流提供要写入管道输出流的所有数据字节。
* PipedOutputStream
* 将管道输出流连接到管道输入流来创建通信管道。
* 数据由某个线程写入 PipedOutputStream 对象,
* 并由其他线程从连接的 PipedInputStream 读取。
*
* 不建议对两上对象使用单线程,可能会发生线程锁死,
* 因为reader在读取文件时,若读取为空,那将会等待,会阻塞后面的写入功能
*/
public class FileDemo7 {
public static void main(String[] args) throws IOException {
// 管道输出流
PipedInputStream in = new PipedInputStream();
// 管道输入流
PipedOutputStream ou = new PipedOutputStream();
// 管道输入流连接到管道输出流
in.connect(ou);
FileDemo7_Read r = new FileDemo7_Read(in);
FileDemo7_Write w = new FileDemo7_Write(ou);
new Thread(r).start();
new Thread(w).start();
}
}
import java.io.PipedOutputStream;
/*
* PipedOutputStream
* 管道输入流
*
*/
public class FileDemo7_Write implements Runnable {
// 定义管道输入流
private PipedOutputStream out;
// 初始化时就得到一个输入流
FileDemo7_Write(PipedOutputStream out) {
this.out = out;
}
public void run() {
try {
System.out.println("正在等待写入流!");
//线程休眠3秒
Thread.sleep(3000);
// 写入数据(字节流)
out.write("--------你好,管道流!".getBytes());
System.out.println("流已写入!");
// 关闭流
out.close();
} catch (Exception e) {
throw new RuntimeException("写入失败!");
}
}
}
import java.io.PipedInputStream;
/*
* PipedInputStream
* 管理输出流
*
*/public class FileDemo7_Read implements Runnable {// 定义输出管道流private PipedInputStream in;// 初始化时就得到一个管道输出流对象FileDemo7_Read(PipedInputStream in) {this.in = in;}public void run() {try {// 定义缓冲区byte[] buf = new byte[1024];System.out.println("正在等待读取流!");// 得到读取的长度int len = in.read(buf);String sb = new String(buf, 0, len);System.out.println("流已读取!");System.out.println(sb);// 关闭流in.close();} catch (Exception e) {throw new RuntimeException("管道输出流失败!");}}}