FileInputStream 類
1 ) FileInputStream 類介紹:
以字節為單位的流處理。字節序列:二進制數據。與編碼無關,不存在亂碼問題。
FileInputStream 類的主要方法有:
Read (), read ( byte[] b ), read ( byte[],int off,int len ) ,available();
2 ) FileInputStream 類與 FileReader 類的區別:
兩個類的構造函數的形式和參數都是相同的,參數為 File 對象或者表示路徑的 String ,它們到底有何區別呢?
FileInputStream :以字節流方式讀取;
FileReader :把文件轉換為字符流讀入;
InputStream提供的是字節流的讀取,而非文本讀取,這是和Reader類的根本區別。用Reader讀取出來的是char數組或者String ,使用InputStream讀取出來的是byte數組。
Reader類及其子類提供的字符流的讀取char,inputStream及其子類提供字節流的讀取byte,所以FileReader類是將文件按字符流的方式讀取,FileInputStream則按字節流的方式讀取文件;InputStreamReader可以將讀如stream轉換成字符流方式,是reader和stream之間的橋梁
最初Java是不支持對文本文件的處理的,為了彌補這個缺憾而引入了Reader和Writer兩個類。
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的方式傳向服務器!
FileReader 類
FileReader 類介紹:
InputStreamReader 類的子類,所有方法(read ()等)都從父類 InputStreamReader 中繼承來;
與 InputStreamReader 類的區別:
該類與它的父類 InputStreamReader 的主要不同在於構造函數,主要區別也就在於構造函數!從 InputStreamReader 的構造函數中看到,參數為 InputStream 和編碼方式,可以看出,當要指定編碼方式時,必須使用 InputStreamReader 類;而 FileReader 構造函數的參數與 FileInputStream 同,為 File 對象或表示 path 的 String ,可以看出,當要根據 File 對象或者 String 讀取一個文件時,用 FileReader 我想FileReader 子類的作用也就在於這個小分工吧。