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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马上都有 中级黑马   /  2014-4-15 18:44  /  824 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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];
                        int len = in.read(buf);

                        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
                {
                        out.write("piped管道来啦!".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);

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


1 个回复

倒序浏览
下面代码可以实现,在Write的run方法中加入读取文件的流。代码优化的话,你可以在new Write对象的时候传入参数,比如你要读取哪个文件,

  1. import java.io.*;

  2. class Read implements Runnable
  3. {
  4.         private PipedInputStream in;
  5.         Read(PipedInputStream in)
  6.         {
  7.                 this.in = in;
  8.         }
  9.         public void run()
  10.         {
  11.                 try
  12.                 {
  13.                         byte[] buf = new byte[1024];

  14.                         //System.out.println("读取前。。没有数据阻塞");
  15.                         int len = 0;
  16.                         //System.out.println("读到数据。。阻塞结束");
  17.                         while ((len=in.read(buf))!=-1)
  18.                         {
  19.                                 String s= new String(buf,0,len);
  20.                                 System.out.println(s);
  21.                         }
  22.                         in.close();

  23.                 }
  24.                 catch (IOException e)
  25.                 {
  26.                         throw new RuntimeException("管道读取流失败");
  27.                 }
  28.         }
  29. }

  30. class Write implements Runnable
  31. {
  32.         private PipedOutputStream out;
  33.         Write(PipedOutputStream out)
  34.         {
  35.                 this.out = out;
  36.         }
  37.         public void run()
  38.         {
  39.                 try
  40.                 {
  41.                         FileInputStream fis=new FileInputStream("d:\\2.java");
  42.                         byte[] b=new byte[1024];
  43.                         int len=0;
  44.                         while ((len=fis.read(b))!=-1)
  45.                         {
  46.                                 out.write(b,0,len);
  47.                         }
  48.                         fis.close();
  49.                         out.close();
  50.                 }
  51.                 catch (Exception e)
  52.                 {
  53.                         throw new RuntimeException("管道输出流失败");
  54.                 }
  55.         }
  56. }

  57. class  PipedStreamDemo
  58. {
  59.         public static void main(String[] args) throws IOException
  60.         {
  61.                 PipedInputStream in = new PipedInputStream();
  62.                 PipedOutputStream out = new PipedOutputStream();
  63.                 in.connect(out);

  64.                 Read r = new Read(in);
  65.                 Write w = new Write(out);
  66.                 new Thread(r).start();
  67.                 new Thread(w).start();


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