黑马程序员技术交流社区

标题: 管道流。 [打印本页]

作者: 王德升    时间: 2012-7-12 18:45
标题: 管道流。
本帖最后由 王德升 于 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();

}

这样写对吗???
作者: 全海波    时间: 2012-7-12 20:08
  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. }

复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2