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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mk7 中级黑马   /  2013-4-17 11:10  /  2180 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 mk7 于 2013-4-17 12:28 编辑

同样是Reader和Writer的子类,管道流与InputStreamReader和 OutputStreamWriter相比,最大的特点是什么?管道流利用多线程进行操作是否可以提高效率?

评分

参与人数 1技术分 +2 收起 理由
黄玉昆 + 2

查看全部评分

7 个回复

倒序浏览
管道流  PipedInputStream和PipedOutputStream
最大的特点就是输入输出可以直接进行连接,通过结合线程使用。是io中唯一结合多线程的
回复 使用道具 举报
FileReader,FileWriter 是读字符的,1个字符是2个字节,
16位OutputStream ,InputStream是读字节的,1个字节是8位,
如果是读汉字的话,一个汉字是2个字节,用InputStream读就会把汉字拆成一半了。
字符流主要读文本比较效率,字节流主要读二进制文件(图片等) 。
{:soso_e152:}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类。

1.OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变成字节流的输出对象。

InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变成字符流的输入对象。

一般在操作输入输出内容就需要使用字节或字符流,但是有些时候需要将字符流变成字节流的形式,或者将字节流变为字符流的形式,所以,就需要另外一组转换流的操作类。
2. java 管道流的读写操作 用于线程间的通信。一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取输入。要使管道流有用,必须同时构造管道输入流和管道输出流。
PipedOutputStream    PipedInputStream  连接起来就是一个管道   
管道输出流可以向管道写入数据   管道输入流可以从管道读取数据   
这种Decorator 装饰 的设计模式 大大增强了java流的功能
可以在构造流的时候连接 管道输入输出流 也可以通过connect函数连接 。

这两个流用处不一样。要线程之间通信就要用到管道流。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
1.一般的流读和写没有联系
2.管道流可以用来对接,可以提高效率.实现数据的传递,也就是进程间的通信
3.一般的流需要一个中转站知道吗?类似缓冲区
4.管道流就不需要了,两个是直达的
java提供了两个特殊的专门的类专门用于处理管道,它们就是pipedinputstream类和pipeoutputstream类。
Pipedinputstream代表了数据在管道中的输出端,也就是线程向管道读数据的一端;pipeoutputstream代表了数据在管道中的输入端,也就是线程向管道写数据的一端,这两个类一起使用可以提供数据的管道流
回复 使用道具 举报
管道流的主要作用是进行两个线程间的通信,一个线程发送数据到输出管道,另一个线程从输入管道中读出数据。通过使用管道,达到实现多个线程间通信的目的。一旦创建了管道之后,就可以利用多线程的通信机制对磁盘中的文件通过管道进行数据的读写,从而使多线程的程序设计在实际应用中发挥更大的作用。
{:soso_e152:}
回复 使用道具 举报
mk7 中级黑马 2013-4-17 12:04:47
7#
丘凤光 发表于 2013-4-17 11:51
管道流  PipedInputStream和PipedOutputStream
最大的特点就是输入输出可以直接进行连接,通过结合线程使用 ...

谢谢 了
回复 使用道具 举报
mk7 中级黑马 2013-4-17 12:06:06
8#
谢谢各位的解答  现在思路清晰多了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马