FileReader FileInputStream InputStreamReader BufferedReader 作用与区别详解

匿名 (未验证) 提交于 2019-12-02 23:03:14

ava.io下面有两个抽象类:InputStream和Reader
InputStream是表示字节输入流的所有类的超类
Reader是用于读取字符流的抽象类
InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。

弄清了两个超类的根本区别,再来看他们底下子类的使用,这里只对最常用的几个说明



从文件系统中的某个文件中获得输入字节

Reader



BufferedReader

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取







BufferedReader的最大特点就是缓冲区的设置
使用BufferedReader可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高


InputStreamReader


InputStreamReader 是字节流通向字符流的桥梁












InputStreamReader最大的特点是可以指转换的定编码格式
,这是其他类所不能的,从构造方法就可看出,
这一点在读取中文字符时非常有用









FileReader


1)FileReader类介绍:
InputStreamReader类的子类,所有方法(read()等)都从父类InputStreamReader中继承而来;
2)与InputStreamReader类的区别:








该类与它的父类InputStreamReader的主要不同在于构造函数,主要区别也就在于构造函数!
从InputStreamReader的构造函数中看到,参数为InputStream和编码方式,可以看出,
当要指定编码方式时,必须使用InputStreamReader
类;而FileReader构造函数的参数与FileInputStream同,为File对象或表示path的String,可以看出,当要根据File对象或者String读取一个文件时,用FileReader;



,I/O速度快且效率搞,但是它的read()方法读到的是一个字节(二进制数据),很不利于人们阅读,而且无法直接对文件中的字符进行操作,比如替换,查找(必须以字节形式操作);
而Reader类弥补了这个缺陷,可以以文本格式输入/输出,非常方便;比如可以使用while((ch = filereader.read())!=-1 )循环来读取文件;可以使用BufferedReader的readLine()方法一行一行的读取文本。
(2)编码


因此要指定编码方式时,必须使用InputStreamReader 类,所以说它是字节转换为字符的桥梁;
(3) 缓存区

(4)规范用法








标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!