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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王新新 于 2013-5-22 16:58 编辑

BufferedReader为什么要与new InputStreamReader()配套用,是什么原因?
InputStreamReader起什么作用呢

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

4 个回复

倒序浏览
也不一定啊亲,可以用其他的,比如:
BufferedReader in
   = new BufferedReader(new FileReader("foo.in"));
将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。

然后给你解释,为什么常见它们配套使用:
InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:

BufferedReader in
   = new BufferedReader(new InputStreamReader(System.in));

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
eycrckag 来自手机 中级黑马 2013-5-22 16:11:32
藤椅
nputStreamReader 是字节流通向字符流的桥梁。放在一起用只是为了提高效率。缓冲区要结合流才可以使用。是在流的基础上对流的功能进行增强!这样说可以吗?
回复 使用道具 举报
InputStreamReader 是转换流,字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
BufferedReader 的构造函数中有个带参数的,参数是字符流,所以不能放字节流,得先用InputStreamReader进行转换就可以了。
希望对你的理解有帮助

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
谢谢楼上的,明白点了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马