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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

FileReader也是InputStreamReader的直接子类,它们的区别在哪里,一般情况下我该使用FileReader,还是使用InputStreamReader?


我来问大家问题,大家抢分啦!!!

8 个回复

倒序浏览
黑马网友  发表于 2011-7-14 12:05:24
沙发
FileReader:需要从文件中读取数据时用。
InputStreamReader:需要从键盘接收数据时用。
通常是按字符流读入时,一般也不仅从键盘,也可以文件,网络,其它对象中读取,不过是按字符进行读取。它是Reader的直接子类。

FileReader 是InputStreamReader 类的子类,所有方法(read ()等)都从父类 InputStreamReader 中继承来;


FileReader类与它的父类 InputStreamReader 的主要不同在于构造函数,主要区别也就在于构造函数!从 InputStreamReader 的构造函数中看到,参数为 InputStream 和编码方式,可以看出,当要指定编码方式时,必须使用 InputStreamReader 类;而 FileReader 构造函数的参数与 FileInputStream 同,为 File 对象或表示 path 的 String ,可以看出,当要根据 File 对象或者 String 读取一个文件时,用 FileReader 我想FileReader 子类的作用也就在于这个小分工吧
回复 使用道具 举报
黑马网友  发表于 2011-7-14 12:52:49
藤椅

回复 2 # 的帖子

不能给分,copy的,不是自己的答案
回复 使用道具 举报
黑马网友  发表于 2011-7-14 14:02:42
板凳
FileReader从InputStreamReader继承,但没有增加新方法,主要区别在于构造函数(创建流的方式),如果需要对已有的字节流转换成字符流那么就应该使用InputStreamReader,FileReader一般用于创建新的文件字符流。

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-14 14:12:12
报纸

都是Reader的子类

FileReader 从单词中可以看出,前缀File意思是文件,一般表示的是这个类的功能。它的父类的父类是一个用于读取字符流的抽象类Reader。从API中可以看出,它是一个专门操作文件的一个Reader的子类。
InputStreamReader 是字节流通向字符流的桥梁,可以从API中看到,在构造一个InputStreamreader对象的时候,要传入一个字节流对象。如InputStreamReader(InputStream in)。

至于在什么时候使用,我们知道处理流得看这个流从哪里来,到哪里去,Reader类是读取处理字符流的,那么不管你给我的是字节流还是字符流最后都要变成字符流。
举个例子,将一个文本文件中的数据存储到另一个文件中,本身处理的就是纯文本文件那么就用FileReader;如果是将键盘录入的数据保存到一个文件中,那么键盘传过来的是字节流,这时候就要使用InputStreamReader

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-15 16:08:45
地板
Reader类及其子类提供的字符流的读取char(16位,unicode编码),inputStream及其子类提供字节

流的读取byte(8位),所以FileReader类是将文件按字符流的方式读取,FileInputStream则按字节流的方式

读取文件;

  FileInputStream 类以二进制输入 / 输出, I/O 速度快且效率搞,但是它的 read ()方法读到的是一个字节(二进制数据),不便于阅读。

而 FileReader 类弥补了这个缺陷,可以  以文本格式输入 / 输出,比较方便;
  例如可以使用:

while((ch = filereader.read())!=-1 ) 循环来读取文件;可以使用 BufferedReader 的 readLine() 方法一

行一行的读取文本。

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-17 13:10:36
7#

回复 楼主 的帖子

FileReader 类是用来创建磁盘文件的字符输入流对象,他的构造函数指定了文件路径和文件名。也就是说FileReader是一个底层流,可以直接访问一个字符串文件
InputStreamReader类是用来一个输入字节流的字节解码为字符,他的构造函数包装了一个InputStream,他使用起来可以算做一个包装类

一般情况下使用FileReader,如果一个文件是字符串文件,FileReader可以直接很方便的读取

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-18 12:19:03
8#
FileReader 用于读取字符流,用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。一般情况下使用InputStreamReader

评分

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

查看全部评分

回复 使用道具 举报
归金博 黑马帝 2011-7-18 12:47:45
9#
FileReader是InputStreamReader的子类,所有方法都从父类中继承而来,当需要指定编码方式时使用InputStreamReader类,当需要根据对象或String读取文件时用FileReader。
[ 本帖最后由 归金博 于 2011-07-18  12:59 编辑 ]

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马