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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小陈期待逆袭 于 2013-5-11 18:29 编辑

如题  我在学习IO转换流,完全不懂 为什么要定义InputStreamReader 和OutputStreamWriter
我知道是将字节流与字符流之间进行转换, 但是使用它的原理和意义是什么,区别又是什么?希望可以用通俗易懂的语言解释一下
谢谢各位大神了。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

5 个回复

倒序浏览
唔...这个也不是很难,一些概念性的东西吧算是,

InputStreamReader 将字节流中德读取流转换成字符流中的读取流,一般用于读取文件之类的,要知道读取和写入,字节流是高效率的,最起码相对于字符流来说。

同理OutputStreamWriter 将字节流中德写入流转换成字符流中德写入流。

一般用到InputStreamReader(Witer) 都回用到装饰类,BufferedReader(Writer) 就是为了方便操作,简化代码,

你可以测试下,用字节流,和用转换字符流,进行同一个文件的读写测试,用过的都说好,因为它方便啊!

如果不用的话,光想着就感觉头大了...

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 hou604720966 于 2013-5-11 17:00 编辑

首先计算机运行是通过CPU来的
呢么InputStreamReader 和OutputStreamWriter是相对CPU来说的
因为CPU要读取文件中的内容,就要用..Reader类 进行操作;CPU要往某个文件中写入内容,就要用....Writer类 进行操作。

2013-05-11_165334.jpg (52.17 KB, 下载次数: 0)

2013-05-11_165334.jpg

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王浩骅 于 2013-5-11 17:25 编辑

这肯定是没好好看视频,打个比方,你从一个文件,或者其他的载体读取数据,就好比你要从一个大木桶里取水或想木桶注水一样,你需要一个工具来去,而在java中提供了“流”这个技术,就相当于一个管道,InputStreamReader就是从木桶取水(读取数据)的管道,相反的OutputStreamWriter就是注水(写入数据的管道)。所以要先建立管道。管道建立好了才能够读取写入数据。至于字节流字符流之类的,字节流是以字节为单位读取相应的数据,字符流是以一个字符(占据2个字节)为单位来读取相应数据。像汉字就是就是占据两个字节的。如果用字节流就会使相应的像汉字这样的数据出现乱码,所以此时就需要使用字符流来操作这样的数据。而其他的转换流都是在某种程度上解决了相应的问题,仔细看看就会明白相应的作用!转换流基本都是套接的流,需要套接在基本的输入输出流的管道上,就是在对其进行二次处理,对上一层管道的数据进行相应的处理。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即将一个字符流的输出对象变为字节流输出对象。
InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即将一个字节流的输入对象变为字符流的输入对象。
以文件操作为例,内存中的字符数据需要通过OutputStreamWriter变为字节流才能保存在文件中,读取时需要将读入的字节流通过InputStreamReader变为字符流,过程是:
写入数据-->内存中的字符数据-->字符流-->OutputStreamWriter-->字符流-->网络传输(或文件保存)
读取数据<--内存中的字符数据<--字符流<--InputStreamReader<--字符流<--网络传输(或文件保存)

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
上面说的都挺好的,不过没有提到,字符编码的问题。
这两个转换流可以指定字符编码的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马