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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王德升 中级黑马   /  2012-7-12 18:45  /  1249 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王德升 于 2012-7-14 00:39 编辑

import java.io.*;

class Read implements Runnable
{
        private PipedInputStream in;
        Read(PipedInputStream in)
        {
                this.in = in;
        }
        public void run()
        {
                try
                {
                        byte[] buf = new byte[1024];//如果不知道多大,该怎么去定义呢,假如定义的太大或者太小,该怎么去避免呢?

                        System.out.println("读取前。。没有数据阻塞");

                        int len = in.read(buf);

                        System.out.println("读到数据。。阻塞结束");

                        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);

                        out.write("piped lai la".getBytes());

                        out.close();
                }
                catch (Exception 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);

                Read r = new Read(in);

                Write w = new Write(out);

                new Thread(r).start();

                new Thread(w).start();


        }
}

主函数如果不抛try就是:

PipedInputStream in = null;
PipedOutputStream out = ull;

try
{
        in = new PipedInpuStream();
        out = new PipedOutputStream();
        in.connect(out);//这句话要不要放在try里面呢???

        Read r = new Read(in);
        Write w = new Write(out);        
}

catch(IOException e)
{
        throw new IOException("输入错误了");//我是抛RuntimeException???
}

finally
{
        new Thread(r).start();
        new Thread(w).start();

}

这样写对吗???

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

1 个回复

倒序浏览
  1.   public void run()
  2.         {
  3.                 try
  4.                 {
  5.                         byte[] buf = new byte[1024];//如果不知道多大,该怎么去定义呢,假如定义的太大或者太小,该怎么去避免呢?
  6. 可以这样:  byte[] buf = new byte[]{};

  7.                         System.out.println("读取前。。没有数据阻塞");

  8.                         int len = in.read(buf);

  9.                         System.out.println("读到数据。。阻塞结束");

  10.                         String s= new String(buf,0,len);

  11.                         System.out.println(s);

  12.                         in.close();

  13.                 }

  14.                 catch (IOException e)
  15.                 {
  16.                         throw new RuntimeException("管道读取流失败");
  17.                 }
  18.         }
  19. }

复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马