1. 程式人生 > >FileInputStream 類與 FileReader 類的區別

FileInputStream 類與 FileReader 類的區別

read != 現象 fileinput gbk 構造器 buffer class 構造函數

FileInputStream 類與 FileReader 類的區別:

兩個類的構造函數的形式和參數都是相同的,參數為 File 對象或者表示路徑的 String ,它們到底有何區別呢?

FileInputStream :以字節流方式讀取;

FileReader :把文件轉換為字符流讀入;

InputStream提供的是字節流的讀取,而非文本讀取,這是和Reader類的根本區別。用Reader讀取出來的是char數組或者String ,使用InputStream讀取出來的是byte數組。

Reader類及其子類提供的字符流的讀取charinputStream及其子類提供字節流的讀取byte,所以FileReader類是將文件按字符流的方式讀取,FileInputStream則按字節流的方式讀取文件;InputStreamReader可以將讀如stream轉換成字符流方式,是readerstream之間的橋梁

最初Java是不支持對文本文件的處理的,為了彌補這個缺憾而引入了ReaderWriter兩個類。

FileInputStream 類以二進制輸入 / 輸出, I/O 速度快且效率搞,但是它的 read ()方法讀到的是一個字節,很不利於人們閱讀。 而 FileReader 類彌補了這個缺陷,可以以文本格式輸入/ 輸出,非常方便;比如可以使用 while((ch = filereader.read())!=-1 ) 循環來讀取文件;可以使用BufferedReader readLine() 方法一行一行的讀取文本。 當我們讀寫文本文件的時候,采用 Reader 是非常方便的,比如 FileReader InputStreamReader BufferedReader 。其中最重要的類是 InputStreamReader ,它是字節轉換為字符的橋梁。 你可以在構造器中指定編碼的方式,如果不指定的話將采用底層操作系統的默認編碼方式,例如 GBK 等。 FileReader InputStreamReader 涉及編碼轉換 ( 指定編碼方式或者采用 os 默認編碼 ) ,可能在不同的平臺上出現亂碼現象!而 FileInputStream 以二進制方式處理,不會出現亂碼現象 . 如果處理純文本文件,建議使用 FileReader ,因為更方便,也更適合閱讀;但是要註意編碼問題!其他情況(處理非純文本文件),FileInputStream是唯一的選擇;FileInputStream是進Socket通訊時會用到很多,如將文件流是Stream的方式傳向服務器!

FileInputStream 類與 FileReader 類的區別