個人不贊同以上答案。
對於位元組流來說,緩衝類只是內部定義了一個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高效"。前提是和自定義陣列結合使用。
個人不贊同以上答案。
對於位元組流來說,緩衝類只是內部定義了一個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高效"。前提是和自定義陣列結合使用。