/*
要求:使用管道流
思路:
1,管道流有两个流,一个是PipeOutputStream一个是PipeInputstream。要明确输出流输到输入流中,或者说写入流写到读取流
2,两个流必须关联起来
3,同时管道流中的输出流和输入流是必须保证是两个线程,以防止死锁,因为,当读取流没有读导数据就会发生死锁。所以必须多线程
4,创建多线程的方法是,必须建立一个类同时去实现runnable方法,把要执行的程序写在这个类中
5,在主函数中开启线程。new Thread(对象)。start
*/
import java.io.*;
import java.util.*;
class PipeDemo
{
public static void main(String[] args) throws IOException
{
PipedOutputStream os=new PipedOutputStream();
PipedInputStream is=new PipedInputStream();
os.connect(is);
Write t=new Write(os);
Read r=new Read(is);
new Thread(t).start();
new Thread(r).start();
}
}
class Write implements Runnable
{
private PipedOutputStream os;//对象一建立就必须有一个管道输出流,方便在里面操作
Write(PipedOutputStream os)//给对象初始化用,从而传进来要操作的管道输出流
{
this.os=os;
}
public void run()
{
try
{
os.write("hahalail".getBytes());//必须写入字节
os.close();
}
catch (IOException e)
{
throw new RuntimeException();//为什么抛出的是RuntimeException()???????????????????????????
}
}
}
class Read implements Runnable
{
private PipedInputStream in;
Read(PipedInputStream in)
{
this.in=in;
}
public void run()
{
try
{
byte[] arr=new byte[1024];
int num=in.read(arr);
String s=new String(arr,0,num);//string的这种方法的记住,在创建对象的时候传入一个数组,可以根据指定将部分转换为字符串
in.close();
System.out.println(s);
}
catch (IOException e)
{
throw new RuntimeException()
}
}
}
|