A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
要求:使用管道流
思路:
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()
                }

        }
       
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

5 个回复

倒序浏览
可能是bug。有时候网上写的都是错的。
回复 使用道具 举报
只是个简单处理罢了,因为如果什么字节都没写入,程序执行也没有意义,可以直接抛RuntimeException终止程序。
回复 使用道具 举报
不知道作者为什么这么写,也许是个人的习惯吧,但觉得代码又一些不严谨,两个线程中对资源的关闭最好写在finally中吧,这样才能抱着资源在异常退出时候也能关闭。
回复 使用道具 举报
线程的run函数不能抛出异常,如果你抛出除了RunnableException异常以外,编译其无法通过,只有RunnableException不需要在方法上throws ,所以是最佳选择
回复 使用道具 举报
下次问题解决了就把类型改成提问结束!谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马