FileInputStream 类与 FileReader 类的区别

FileInputStream 类与 FileReader 类的区别: 

两个类的构造函数的形式和参数都是相同的,参数为 File 对象或者表示路径的 String ,它们到底有何区别 

呢? 

l         Readers and Writers work only on line based character data, so plain text files. 
For anything else, you MUST use Streams. 

l         JDK5 API: 

FileInputStream is meant for reading streams of raw bytes such as image data. For reading streams 

of characters, consider using FileReader. 

FileReader is meant for reading streams of characters. For reading streams of raw bytes, consider 

using a FileInputStream . 

l         FileInputStream :以字节流方式读取; FileReader :把文件转换为字符流读入; 
l        InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。用Reader读取出 

来的是char数组或者String ,使用InputStream读取出来的是byte数组。 
l        Reader类及其子类提供的字符流的读取char(16位,unicode编码),inputStream及其子类提供字节 

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

读取文件;InputStreamReader可以将读如stream转换成字符流方式,是reader和stream之间的桥梁 
l 最初Java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类。 

l         FileInputStream 类以二进制输入 / 输出, I/O 速度快且效率搞,但是它的 read ()方法读到 

的是一个字节(二进制数据),很不利于人们阅读。 

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

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

行一行的读取文本。 

l         当我们读写文本文件的时候,采用 Reader 是非常方便的,比如 FileReader , 

InputStreamReader 和 BufferedReader 。其中最重要的类是 InputStreamReader ,它是字节转换为字符的桥 

梁。 你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如 GBK 等 

。 

l         FileReader 与 InputStreamReader 涉及编码转换 ( 指定编码方式或者采用 os 默认编码 ) ,可 

能在不同的平台上出现乱码现象!而 FileInputStream 以二进制方式处理,不会出现乱码现象 .