程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> InputStreamReader 和FileReader的差別及InputStream和Reader的差別

InputStreamReader 和FileReader的差別及InputStream和Reader的差別

編輯:關於JAVA

InputStreamReader 和FileReader的差別及InputStream和Reader的差別。本站提示廣大學習愛好者:(InputStreamReader 和FileReader的差別及InputStream和Reader的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是InputStreamReader 和FileReader的差別及InputStream和Reader的差別正文


起首給年夜家引見InputStreamReader 和FileReader的差別,詳細內容以下所示:

InputStreamReader 和 BufferedReader 。個中最主要的類是 InputStreamReader ,它是字節轉換為字符的橋梁。 你可以在結構重視指定編碼的方法,假如不指定的話將采取底層操作體系的默許編碼方法,例如 GBK 等。

FileReader 與 InputStreamReader 觸及編碼轉換 ( 指定編碼方法或許采取 os 默許編碼 ) ,能夠在分歧的平台上湧現亂碼景象!而 FileInputStream 以二進制方法處置,不會湧現亂碼景象 .

FileInputStream字撙節是 以一個一個字節來讀。

FileReader字符流是 以一個一個字符來讀取的。

BufferedReader bufReader = null;
InputStreamReader isr = null;
FileReader fr = null;
try {
for(String fileName:fileNames){
  辦法一:
  isr = new InputStreamReader(new FileInputStream("D:\test.txt"), "utf-8");
  bufReader = new BufferedReader(isr);
  辦法二:
  fr = new FileReader("D:\test.txt");
  bufReader = new BufferedReader(fr);
  while (bufReader.ready()) {
   // 1. 獲得每行數據 
   String dataLine = bufReader.readLine();
   }
}

InputStream和Reader的差別

java.io上面有兩個籠統類:InputStream和Reader

InputStream是表現字節輸出流的一切類的超類

Reader是用於讀取字符流的籠統類

InputStream供給的是字撙節的讀取,而非文本讀取,這是和Reader類的基本差別。

即用Reader讀掏出來的是char數組或許String ,應用InputStream讀掏出來的是byte數組。

弄清了兩個超類的基本差別,再來看他們底下子類的應用,這裡只對最經常使用的幾個解釋

InputStream
   | __FileInputStream

FileInputStream 從文件體系中的某個文件中取得輸出字節。

結構辦法摘要 

FileInputStream (File  file) 

          經由過程翻開一個到現實文件的銜接來創立一個 FileInputStream ,該文件經由過程文件體系中的 File 對象 file 指定。

FileInputStream (FileDescriptor  fdObj)

          經由過程應用文件描寫符 fdObj 創立一個 FileInputStream ,該文件描寫符表現到文件體系中某個現實文件的現有銜接。

FileInputStream (String  name) 

          經由過程翻開一個到現實文件的銜接來創立一個 FileInputStream ,該文件經由過程文件體系中的途徑名 name 指定。 

Reader

   |——BufferedReader
   |___InputStreamReader
         |__FileReader

BufferedReader : 從字符輸出流中讀取文本,緩沖各個字符,從而完成字符、數組和行的高效讀取。

結構辦法摘要 

BufferedReader (Reader  in)

          創立一個應用默許年夜小輸出緩沖區的緩沖字符輸出流。

BufferedReader (Reader  in, int sz)

          創立一個應用指定年夜小輸出緩沖區的緩沖字符輸出流。

BufferedReader (Java Platform SE 6)

BufferedReader的最年夜特色就是緩沖區的設置。平日Reader 所作的每一個讀取要求都邑招致對底層字符或字撙節停止響應的讀取要求,假如沒有緩沖,則每次挪用 read() 或 readLine() 都邑招致從文件中讀取字節,並將其轉換為字符後前往,而這是極端低效的。

應用BufferedReader可以指定緩沖區的年夜小,或許可以使用默許的年夜小。年夜多半情形下,默許值就足夠年夜了。

是以,建議用 BufferedReader 包裝一切其 read() 操作能夠開支很高的 Reader(如 FileReader 和InputStreamReader)。

例如,

 BufferedReader in
  = new BufferedReader(new FileReader("foo.in"));

 將緩沖指定文件的輸出。

InputStreamReader (Java Platform SE 6) 

InputStreamReader 是字撙節通向字符流的橋梁:它應用指定的 charset 讀取字節並將其解碼為字符。它應用的字符集可以由稱號指定或顯式給定,或許可以接收平台默許的字符集。 

結構辦法摘要 

InputStreamReader (InputStream in) 
     創立一個應用默許字符集的 InputStreamReader。 
InputStreamReader (InputStream in, Charset cs) 
     創立應用給定字符集的 InputStreamReader。 
InputStreamReader (InputStream in, CharsetDecoder dec) 
     創立應用給定字符集解碼器的 InputStreamReader。 
InputStreamReader (InputStream in, String charsetName) 
     創立應用指定字符集的 InputStreamReader。
 

每次挪用 InputStreamReader 中的一個 read() 辦法都邑招致從底層輸出流讀取一個或多個字節。要啟用從字節到字符的有用轉換,可以提早從底層流讀取更多的字節,使其跨越知足以後讀取操作所需的字節。

為了到達最高效力,可要斟酌在 BufferedReader 內包裝 InputStreamReader。例如:

 BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

InputStreamReader最年夜的特色是可以指轉換的定編碼格局,這是其他類所不克不及的,從結構辦法便可看出,這一點在讀取中文字符時異常有效

FileReader

1)FileReader類引見:

InputStreamReader類的子類,一切辦法(read()等)都從父類InputStreamReader中繼續而來;

2)與InputStreamReader類的差別:

結構辦法摘要 

FileReader (File  file) 

          在給定從中讀取數據的 File 的情形下創立一個新 FileReader 。

FileReader (FileDescriptor  fd) 

         在給定從中讀取數據的 FileDescriptor 的情形下創立一個新 FileReader 。

FileReader (String  fileName) 

          在給定從中讀取數據的文件名的情形下創立一個新 FileReader 

該類與它的父類InputStreamReader的重要分歧在於結構函數,重要差別也就在於結構函數!

從InputStreamReader的結構函數中看到,參數為InputStream和編碼方法,可以看出,當要指定編碼方法時,必需應用InputStreamReader類;而FileReader結構函數的參數與FileInputStream同,為File對象或表現path的String,可以看出,當要依據File對象或許String讀取一個文件時,用FileReader;

我想FileReader子類的感化也就在於這個小分工吧。該類與它的父類InputStreamReader的重要分歧在於結構函數,重要差別也就在於結構函數!

從InputStreamReader

的結構函數中看到,參數為InputStream和編碼方法,可以看出,當要指定編碼方法時,必需應用InputStreamReader類;而FileReader結構函數的參數與FileInputStream同,為File對象或表現path的String,可以看出,當要依據File對象或許String讀取一個文件時,用FileReader;

我想FileReader子類的感化也就在於這個小分工吧。

二 接洽與差別

(1)字符與字節:

FileInputStream 類以二進制輸出/輸入,I/O速度快且效力弄,然則它的read()辦法讀到的是一個字節(二進制數據),很晦氣於人們浏覽,並且沒法直接對文件中的字符停止操作,好比調換,查找(必需以字節情勢操作);

而Reader類填補了這個缺點,可以以文本格局輸出/輸入,異常便利;好比可使用while((ch = filereader.read())!=-1 )輪回來讀取文件;可使用BufferedReader的readLine()辦法一行一行的讀取文本。

(2)編碼

InputStreamReader ,它是字節轉換為字符的橋梁。 你可以在結構重視指定編碼的方法,假如不指定的話將采取底層操作體系的默許編碼方法,例如GBK等。

FileReader與InputStreamReader 觸及編碼轉換(指定編碼方法或許采取os默許編碼),能夠在分歧的平台上湧現亂碼景象!而FileInputStream 以二進制方法處置,不會湧現亂碼景象.

是以要指定編碼方法時,必需應用InputStreamReader 類,所以說它是字節轉換為字符的橋梁;

(3) 緩存區

    BufferReader類用來包裝一切其 read() 操作能夠開支很高的 Reader(如 FileReader 和InputStreamReader)。

(4)標准用法

總結以上內容,得出比擬好的標准用法:

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);
��時刻,赓續掏出message,交給Handler處置,在我們覆寫的HandleMessage中,辨認出我們發送的新聞,將新聞處置。固然這裡只是一個Empty新聞,所以在handleMessage中沒有去履行msg.what的斷定。

以上內容是小編給年夜家引見的Android新聞機制,願望對年夜家有所贊助!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved