黑马程序员技术交流社区

标题: 管道流中数据传输方向的问题 [打印本页]

作者: hdsjsql    时间: 2013-5-19 18:16
标题: 管道流中数据传输方向的问题
本帖最后由 hdsjsql 于 2013-5-19 18:18 编辑
  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.                         

  15.                         System.out.println("读取前。。没有数据阻塞");
  16.                         int len = in.read(buf);
  17.                         System.out.println("读到数据。。阻塞结束");



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

  19.                         System.out.println(s);

  20.                         in.close();

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

  28. class Write implements Runnable
  29. {
  30.         private PipedOutputStream out;
  31.         Write(PipedOutputStream out)
  32.         {
  33.                 this.out = out;
  34.         }
  35.         public void run()
  36.         {
  37.                 try
  38.                 {
  39.                         System.out.println("开始写入数据,等待6秒后。");
  40.                         Thread.sleep(6000);
  41.                         out.write("piped lai la".getBytes());
  42.                         out.close();
  43.                 }
  44.                 catch (Exception e)
  45.                 {
  46.                         throw new RuntimeException("管道输出流失败");
  47.                 }
  48.         }
  49. }

  50. public class  PipedStreamDemo
  51. {
  52.         public static void main(String[] args) throws IOException
  53.         {

  54.                 PipedInputStream in = new PipedInputStream();
  55.                 PipedOutputStream out = new PipedOutputStream();
  56.                 in.connect(out);                                                      //此处可改为out.connect(in),执行结果相同
  57.                                                                                               //这是说明管道流中的数据时由PipedOutputStream对象输入,
  58.                                                                                               //PipedInputStream对象输出。而且只有这一中传输方向?
  59.                 Read r = new Read(in);
  60.                 Write w = new Write(out);
  61.                 new Thread(r).start();
  62.                 new Thread(w).start();


  63.         }
  64. }
复制代码

作者: 史政法    时间: 2013-5-20 06:09
看完了代码,再往下一看,吓我一跳,问题呢?
如果?前是问题的话,,,,那么也就是结果,,,你自己都已经总结出来了。。。。。。。{:soso_e127:}
作者: 奔跑的二叉树    时间: 2013-9-20 10:36
out.connect(in)与in.connect(out)效果一样,都是连接管道,无所谓方向问题,因为输入流是阻塞线程,没有输入数据时,它会等待,宏观上来说它是最后执行的。这个程序里,输出流写了一些数据到管道,所以它也输入了,输入流到管道读到取数据显示到控制台,所以它也输出了




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