天天看點

Java_InputStream & InputStreamReader &BufferedReader差別

Java 中,讀取檔案時,往往會涉及到 InputStream & InputStreamReader &BufferedReader.

自己畫了個類圖,友善了解

1. 類圖

Java_InputStream & InputStreamReader &BufferedReader差別

2. 例子

例如在讀取位元組流的時候:

private String readFromStream(InputStream inputStream) throws IOException {
  StringBuilder output = new StringBuilder();
  if (inputStream != null) {
    InputStreamReader inputStreamReader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));
    BufferedReader reader = new BufferedReader(inputStreamReader);
    String line = reader.readLine();
    while (line != null) {
      output.append(line);
      line = reader.readLine();
    }
  }
  return output.toString();
}
           

讀寫位元組流大體涉及到 Steams(s表示有多種), Readers/Writers, BufferedReader/BufferedWriter。 其中的作用如下:

Streams: 處理位元組級别的資料

Reader/Writer : 處理字元級别的資料。 支援多種字元編碼

BufferedReader/BufferedWriter:  優化性能。 需要讀取的資料,會緩存到記憶體中,以便快速通路。(包裝了Reader/Writer)

3. 流程

InputStream 擷取位元組流資料, Reader 将位元組流資料轉換成 字元資料,由BufferedReader 寫入字元資料到記憶體中, 最後JAVA 程式從記憶體中讀取。

Streams/Reader/BufferedReader 中都有read()操作, 但是前面兩個需要Java程式從硬碟中讀取,效率很低; 後者從記憶體中讀取,效率高

參考:

https://stackoverflow.com/questions/43147069/how-do-an-inputstream-inputstreamreader-and-bufferedreader-work-together-in-jav/43147213

https://stackoverflow.com/questions/7376647/what-is-the-difference-between-javas-bufferedreader-and-inputstreamreader-class

Java 官方介紹(推薦):

http://www.javalearningacademy.com/streams-in-java-concepts-and-usage/