天天看點

【Java基礎】InputStream 、 InputStreamReader和BufferedReader

在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型,此時已能夠輸出中文字元,而且可速度上看出,輸出字元流比輸出位元組流要快。以下是結果的部分截圖:

【Java基礎】InputStream 、 InputStreamReader和BufferedReader

BufferedReader

擷取字元流後,可直接緩存,然後從緩存區取出。這時的速度比InputStreamReader又将快上非常多。輸出結果同上。

總結

在讀取網絡資料流的時候。能夠通過先用InputStream擷取位元組流、InputStreamReader将位元組流轉化成字元流、BufferedReader将字元流以緩存形式輸出的方式來高速擷取網絡資料流。