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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xieshuhua 中级黑马   /  2012-5-18 17:01  /  2938 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谢述华 于 2012-5-18 19:05 编辑

今天看毕老师的IO视频,讲到FileReader中的read方法返回int型数据
但同时又看到InputStream已经将read方法覆写了,而且本身InputStreamReader很清楚是字节流转化为字符流的转换流。
做了下试验,FileReader和InputStreamReader均返回字节流数据。请问字节流转化为字符流转换主要体现在哪里
注:println()接受并显示Char数据。
试验代码和图如下:
  1. import java.io.File;
  2. import java.io.FileReader;
  3. public class cw {
  4. public static void main(String[] args) throws Exception {
  5. /*InputStreamReader x=new InputStreamReader(System.in);
  6. System.out.println(x.read());*/
  7. FileReader x= new FileReader("D:"+File.separator+"java"+File.separator+"hello.java");
  8. System.out.println(x.read());
  9. }
  10. }
复制代码

打印字符.png (2.17 KB, 下载次数: 31)

打印字符.png

InputStreamReader将read覆写.png (5.08 KB, 下载次数: 31)

InputStreamReader将read覆写.png

Reader返回int数据.png (5.8 KB, 下载次数: 36)

Reader返回int数据.png

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

5 个回复

正序浏览
个人看法,不管是字节流还是字符流,对流的操作最终都是以字节的形式来完,而字符流只是将字节流封装,它并没有提供所谓的高效,而是提供了对数据操作的便捷。字符流的本质还是将字节流以字节的形式读入到数组中。所以当它读到下一个字节时,该字节为空时,它会将数组中的数据先返回,并在下次读取时,直接返回-1.至于为什么返回-1,表面上理解一下,是因为如果返回byte类型的数字时,该数字的长度有限,万一数组中存在该对应的值,那么结果就会出现错误。
回复 使用道具 举报
       首先弄清楚数据在内存及磁盘上的存储格式,我们都知道,是以二进制方式存储的,因为计算机只能识别二进制语言。要想在控制台上看到的是一串能识别的字符,就必须要将从底层的字节流中读入的字节码转换为字符流中的字符,这就涉及到了字节流与字符流之间的相互转换,而InputStreamReader是字节流转化为字符流的桥梁,它向下面临的是从内存的底层字节流中读取字节码,向上面临的是字符流中的字符,所以当然要进行转换
回复 使用道具 举报
我觉得应该是可以调用BufferedReader对InputStreamReader对象进行装饰,然后就可以调用readLine()方法。这样读取文件更加高效!
回复 使用道具 举报
我想问的是:字节流转化为字符流转换主要体现在哪里。。。
回复 使用道具 举报
InputStreamReader是字节流通向字符流的桥梁,它使用指定的charset读取字节并将其解码为字符。
它拥有一个InputStream类型的变量,并继承了Reader,使用了对象的适配器模式.
每次调用InputStreamReader中的read()方法都会导致从底层输入流读取一个或多个字节,通过给定的字符集,
将字节解码为字符。
FileReader 只能使用系统默认的字符集对字节进行解码,不能显示指定。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马