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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑飞 高级黑马   /  2014-10-25 22:11  /  1211 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郑飞 于 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,可是代码却是相反方向的,这是为什么啊?

4 个回复

正序浏览
nxp1986 发表于 2014-10-25 22:38
管道流是先有数据才能读取的,代码中你没有引入别的文件或数据,而使用管道流的输出的方法,所以只能是先写 ...

PipedOutputStream类的说明:通常,数据由某个线程写入 PipedOutputStream 对象,并由其他线程从连接的 PipedInputStream 读取。
PipedInputStream类的说明:通常,数据由某个线程从 PipedInputStream 对象读取,并由其他线程将其写入到相应的 PipedOutputStream。
好像看懂了 : 我的数据"abcd"写入pos,(pos作为pis的参数),由pis读取出来;代码中确实是这么个运行方式;
回复 使用道具 举报
nxp1986 发表于 2014-10-25 22:38
管道流是先有数据才能读取的,代码中你没有引入别的文件或数据,而使用管道流的输出的方法,所以只能是先写 ...

管道流不是没有接收数据的构造方法么 我看老毕的视屏中数据也是从PipedOutputStream的write()方法中进去的 所以才有了以上的疑问
回复 使用道具 举报
管道流是先有数据才能读取的,代码中你没有引入别的文件或数据,而使用管道流的输出的方法,所以只能是先写入后才能读取,没有写入的数据怎么能读取出来数据呢?
回复 使用道具 举报
写错了 运行结果是abcd 改过来了 不影响问题;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马