您的位置:首页 > Web前端

Java 之 FileReader FileInputStream InputStreamReader BufferedReader 作用与区别

2015-05-28 11:36 369 查看
一直搞不清楚FileReader FileInputStream InputStreamReader BufferedReader 之间的区别联系,每次写读取文档的java程序都是网上百度。今天专门就这个问题进行了深入探讨。
一、来源

java.io下有两个抽象类InputStream和Reader,上述类都是继承了这两个超类。它们之间区别是:InputStream是字节流的输入,Reader是字符流输入。
二、具体每类

InputStream
| __FileInputStream
FileInputStream 集成自InputStream,可以读取制定FILE或路径的文件。

Reader
|――BufferedReader
|___InputStreamReader
|__FileReader
BufferedReader:从字符输入流中读取文本,并缓冲各个字符。它最重要的一点就是:有缓冲,不用像其他Reader一样每次读取都从底层字节或字符流读取。

InputStreamReader:字节流到字符流的桥梁。其重要特点是:可以使用指定的编码格式。
FileReader:是InputStreamReader的子类,其和父类主要区别在构造函数不同,当根据File或String读取文件时用FileReader。
三、要点

1、InputStreamReader ,它是字节转换为字符的桥梁。 你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如GBK等。
FileReader与InputStreamReader 涉及编码转换(指定编码方式或者采用os默认编码),可能在不同的平台上出现乱码现象!而FileInputStream 以二进制方式处理,不会出现乱码现象.
因此要指定编码方式时,必须使用InputStreamReader 类,所以说它是字节转换为字符的桥梁;
2、为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
3、规范用法
总结以上内容,得出比较好的规范用法:
1) File file = new File ("hello.txt");
FileInputStream in=new FileInputStream (file);
2) File file = new File ("hello.txt");
FileInputStream in=new FileInputStream (file);
InputStreamReader inReader=new InputStreamReader (in,"UTF-8");
BufferedReader bufReader=new BufferedReader(inReader);
3) File file = new File ("hello.txt");
FileReader fileReader=new FileReader(file);
BufferedReader bufReader=new BufferedReader(fileReader);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐