//io流-多线程连接管道流
import java.io.*;
class Read implements Runnable//implements Runnable 实现Runnable接口 管道流必须使用多线程,因为PipedInputStream是进程阻塞方法
{
private PipedInputStream in;//管道流一生成就要存在
Read(PipedInputStream in)//构造器
{
this.in = in;
}
public void run()//实现Runnable接口 就必须 重写run()方法
{
try
{
byte[] buf = new byte[1024];
System.out.println("读取前,没有数据就阻塞");
int len = in.read(buf);//int read(byte[] b)
System.out.println("读到数据,阻塞结束");
//从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
String s = new String(buf,0,len);
System.out.println(s);
in.close();
}
catch (IOException e)
{
throw new RuntimeException("管道读取流失败");
}
}
}
class Write implements Runnable
{
private PipedOutputStream out;
Write(PipedOutputStream out)
{
this.out = out;
}
public void run()
{
try
{
System.out.println("开始写入数据 ,等待6秒后");
Thread.sleep(6000);//释放执行权6秒
out.write("piped lai la".getBytes());//getBytes()是将一个字符串转化为一个字节数组
out.close();
}
catch (IOException e)
{
throw new RuntimeException("管道输出流失败");
}
}
}
class PipedStreamDemo
{
public static void main(String[] args) throws IOException
{
PipedInputStream in = new PipedInputStream();
PipedOutputStream out = new PipedOutputStream();
in.connect(out);//管道in 和 out 进行连接
Read r = new Read(in);//线程对象 传入 管道流
Write w = new Write(out);//线程对象 传入 管道流
new Thread(r).start();//开启新线程
new Thread(w).start();//开启新线程
}
}
io流-多线程连接管道流
最新推荐文章于 2022-08-28 22:00:55 发布