回覆列表
  • 1 # 使用者487165761272

    個人不贊同以上答案。

    對於位元組流來說,緩衝類只是內部定義了一個8kb的陣列而已。從這個角度來說,和我用FileInputStream的read(byte[])方法讀取檔案,然後裝進一個自定義的8kb陣列的效率一模一樣。示例如下。

    byte[] buf = new byte[8192];

    int length = 0;

    while((length= fileInputStream.read(buf))!=-1){

    System.out.println(new String(buf,0,length));

    }

    其實,這段程式碼的效率甚至要比官方定義的緩衝類效率更高,因為BufferedInputStream的read方法原始碼裡面還有一個判斷,影響了效率(這裡給出原始碼,不過多解釋)。

    public synchronized int read() throws IOException {

    if (pos >= count) {

    fill();

    if (pos >= count)

    return -1;

    }

    return getBufIfOpen()[pos++] & 0xff;

    }

    而對於字元流來說也是如此。只不過裡面擴充套件了一個readLine()方法深受開發者喜歡,所以用的很多。但是效率上,和我用fileReader加上自定義一個數組讀取的效率並沒有什麼差別,甚至是毫無差別。別總是以為官方的就是好的。就連readline方法自己寫出來也就是十幾行程式碼的事兒。

    當初教我的老師,用位元組流讀取檔案的時候一向喜歡用FileInputStream加自定義陣列的方式,而不喜歡用緩衝位元組流。用他的話說就是:都一樣。而緩衝字元流倒是經常用,就因為有readline方法。

    所以,題主的問題答案很簡單,並沒有什麼可以證明"BufferedReader,BufferedWriter 要比 FileReader 和 FileWriter高效"。前提是和自定義陣列結合使用。

  • 中秋節和大豐收的關聯?
  • 胃癌早期手術後,不用化療,需要吃中藥嗎,如果需要,吃多長時間?