黑马程序员技术交流社区

标题: 管道流关于API的不解,大家帮忙看看,谢谢... [打印本页]

作者: 郑飞    时间: 2014-10-25 22:11
标题: 管道流关于API的不解,大家帮忙看看,谢谢...
本帖最后由 郑飞 于 2014-10-25 22:34 编辑

这是PipedInputStream类的说明中的:    通常,数据由某个线程从 PipedInputStream 对象读取,并由其他线程将其写入到相应的 PipedOutputStream
我看了老毕的代码,后来自己写了个类似的,如下:
  1. package com.itheima.io;
  2. import java.io.PipedInputStream;
  3. import java.io.PipedOutputStream;
  4. import java.util.Arrays;

  5. public class Test {

  6.         public static void main(String[] args) throws Exception, NoSuchMethodException {
  7.                PipedInputStream pis = new PipedInputStream();
  8.                PipedOutputStream pos = new PipedOutputStream();
  9.                pis.connect(pos);
  10.                
  11.                pos.write("abcd".getBytes());
  12.                
  13.                byte[] buf = new byte[10];
  14.                pis.read(buf);
  15.                
  16.                System.out.println(Arrays.toString(buf));
  17.                pis.close();
  18.                pos.close();
  19.         }

  20. }
复制代码


正常运行,输出正确:abcd;
PipedInputStream类说明中说,数据流向是从PipedInputStream到PipedOutputStream,可是代码却是相反方向的,这是为什么啊?


作者: 郑飞    时间: 2014-10-25 22:35
写错了 运行结果是abcd 改过来了 不影响问题;
作者: nxp1986    时间: 2014-10-25 22:38
管道流是先有数据才能读取的,代码中你没有引入别的文件或数据,而使用管道流的输出的方法,所以只能是先写入后才能读取,没有写入的数据怎么能读取出来数据呢?
作者: 郑飞    时间: 2014-10-25 22:45
nxp1986 发表于 2014-10-25 22:38
管道流是先有数据才能读取的,代码中你没有引入别的文件或数据,而使用管道流的输出的方法,所以只能是先写 ...

管道流不是没有接收数据的构造方法么 我看老毕的视屏中数据也是从PipedOutputStream的write()方法中进去的 所以才有了以上的疑问
作者: 郑飞    时间: 2014-10-25 22:51
nxp1986 发表于 2014-10-25 22:38
管道流是先有数据才能读取的,代码中你没有引入别的文件或数据,而使用管道流的输出的方法,所以只能是先写 ...

PipedOutputStream类的说明:通常,数据由某个线程写入 PipedOutputStream 对象,并由其他线程从连接的 PipedInputStream 读取。
PipedInputStream类的说明:通常,数据由某个线程从 PipedInputStream 对象读取,并由其他线程将其写入到相应的 PipedOutputStream。
好像看懂了 : 我的数据"abcd"写入pos,(pos作为pis的参数),由pis读取出来;代码中确实是这么个运行方式;




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