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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张强1 中级黑马   /  2013-7-23 19:50  /  1131 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

BufferReader FileInputStream FileReader
这三个读取的时候一个按行读取,一个按字节读取,最后一个按字符读取?
那为什么不都用BufferReader呢?这样不是省事多了?

评分

参与人数 1黑马币 +3 收起 理由
杨兴庭 + 3 赞一个!

查看全部评分

7 个回复

倒序浏览
BufferReader为字符流缓冲区储存读取字符流文件; FileInputStream为读取字节文件; FileReader为读取字符文件
回复 使用道具 举报
BufferReader是高效的字符读取流,如果被操作的数据是纯文本数据,可以使用此流,他的readLine()方法,可以进行纯文本数据的按行读取。
FileInputStream是字节输入流,用于对文件的操作。
FileReader是字符输入流,用于纯文本文件的操作。
字符流相比较字节流,字符流主要针对纯文本数据的操作,如果被操作的数据是纯文本,就可以使用字符操作流进行读取和写入。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
同学你要搞清楚BufferReader 只是一个装饰类,他自己是没有办法读写的,真正的读写还得传递基本的流对象。
而且你看BufferReader 的构造都是必须要传入一个流对象,它是没有空构造的

就好比你的房子,BufferReader就好比是把你的房子 装饰的更好看 更具功能性

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
流从结构上分为字节流(以字节为处理单位或称面向字节)和字符流(以字符为处理单位或称面向字符),字节流的输入流和输出流基础是InputStream和OutputStream这两个抽象类,字节流的输入输出操作由这两个类的子类实现,FileInputStream类就是InputStream类的子类,是用于操作文件的字节流类。字符流的基础是抽象类Reader和Writer,同理,字符流的输入输出操作也由这两个类的子类实现,FileReader类是Reader类的子类,是用于操作文件的字符流类。字符流虽然是以字符为处理单位的,但最底层,所有的输入输出都是字节形式的。基于字符的流只为处理字符提供方便有效的方法。BufferedReader通过缓冲输入提高性能。在构造时需传入一个字符输入流对象。它们的作用不相同,不能相互替代。FileInputStream能读取所有类型的文件,FileReader只能读取纯文本的文件,BufferedReader只是在FileReader的基础上提高了读取效率,但也不能替代FileReader。
回复 使用道具 举报
1. BufferedReader   由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取分行文本很适合,BufferedReader是针对Reader的,不直接针对文件,也不是只针对文件读取。
2, FileReader是由java.io.InputStreamReade扩展来的,是针对文件读取的。实际使用时往往用 BufferedReader bfrTemp = new BufferedReader(new FileReader("test.conf"));先建立一个文件reader,再用BufferedReader读。
3. FileInputStream   扩展自java.io.InputStream,InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。
回复 使用道具 举报
因为字节流比字符流使用范围更广,但字符流比字节流更易操作。
对于文本字节来说,如果按字节流读,只能是靠循环一个一个的读,尤其针对实际的效果(如打印),效率低;
但是如果用InputS将字节流转换成字符流,按字符流来读的话,可以用字符流中的特有的BufferedReader装饰类,为什么要用BufferedReader呢?因为BufferedReader中有readLine()方法,readLine()可以一行一行的读取字符,这样就会提高读取效率。
回复 使用道具 举报
因为字节流比字符流使用范围更广,但字符流比字节流更易操作。
对于文本字节来说,如果按字节流读,只能是靠循环一个一个的读,尤其针对实际的效果(如打印),效率低;
但是如果用InputStramReader将字节流转换成字符流,按字符流来读的话,可以用字符流中的特有的BufferedReader装饰类,为什么要用BufferedReader呢?因为BufferedReader中有readLine()方法,readLine()可以一行一行的读取字符,这样就会提高读取效率。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马