在Java中。上述三個類經經常使用于處理資料流,以下介紹一下三個類的不同之處以及各自的使用方法。
InputStream : 是全部位元組輸入流的超類,一般使用它的子類:FileInputStream等。它能輸出位元組流;
InputStreamReader : 是位元組流與字元流之間的橋梁,能将位元組流輸出為字元流。而且能為位元組流指定字元集,可輸出一個個的字元。
BufferedReader : 提供通用的緩沖方式文本讀取,readLine讀取一個文本行, 從字元輸入流中讀取文本,緩沖各個字元,進而提供字元、數組和行的高效讀取。
以下有三個Demo(Demo訪問百度首頁擷取位元組流然後輸出)來分别說明三個類的作用:
InputStream
通過URL連接配接擷取了InputStream流連接配接,然後通過read方法來一個位元組一個位元組的讀取位元組流并組合在一起(read方法傳回-1則資料讀取結束),最後以reasults傳回。
輸出例如以下:
60 33 68 79 67 84 89 80 69 32 104 116 109 108 62 60 33 45 45 83 84 65 84 ……
這就是位元組流,每一個數字都是一個位元組(Byte。8位),是以假設讀取英文的話,用位元組流。然後用(char)強制轉化一下即可了,但假設有中文等雙位元組語言或者說須要指定字元編碼集的情況。就必須用到InputStreamReader将位元組流轉化為字元流了。
InputStreamReader
先擷取位元組流,然後建立InputStreamReader将位元組流轉化成字元流,并指定其字元集為UTF-8,然後使用強制轉化将read到的int位元組轉化為char型,此時已能夠輸出中文字元,而且可速度上看出,輸出字元流比輸出位元組流要快。以下是結果的部分截圖:

BufferedReader
擷取字元流後,可直接緩存,然後從緩存區取出。這時的速度比InputStreamReader又将快上非常多。輸出結果同上。
總結
在讀取網絡資料流的時候。能夠通過先用InputStream擷取位元組流、InputStreamReader将位元組流轉化成字元流、BufferedReader将字元流以緩存形式輸出的方式來高速擷取網絡資料流。