2013-03-04 211 views
2

假設BufferedReader的緩衝區大小與cbuf的大小相同,和BufferedReader之間調用read(char[] cbuf)時的性能差異是多少。閱讀器vs緩衝閱讀器

我知道FileReader上的一個簡單的read()調用在每次本機調用讀取每個字符時都會變慢。

read(char[] cbuf)FileReader將讀取cbuf字符的大小隻有一個本地調用,這是類似於BufferedReader

如果在FileReaderBufferedReader上使用read(char[] cbuf)方法,那麼會有任何性能差異。

+2

您是否嘗試過測量? – 2013-03-04 20:35:56

回答

2

FileReader上的read(char [] cbuf)只會用一個與BufferedReader類似的本地調用來讀取chars的cbuf大小。

這是不正確的。沒有讀入Java char[]陣列的本機調用。一個FileReader實際上是一個InputStreamReader分層覆蓋一個FileInputStream.InputStreamReader運行一個8k內部緩衝區。因此,該文件一次最多可以讀取8k。

所以會有任何性能差,如果讀(燒焦[] CBUF)上正在使用FileReader VS BufferedReader方法。

您會讀到BufferedReader由於雙緩衝而緩慢讀入緩衝區的意見,但它們不正確。 BufferedReader檢測到這種情況,並在可能的情況下直接進行讀取。

總之,你不會注意到一個區別。

+1

什麼是雙緩衝? – vjk 2013-03-05 16:42:22

+0

緩衝兩次。 BufferedReader有一個內部緩衝區,而你讀入的char []是另一個。 – EJP 2013-03-05 19:19:01

1

該計劃:BufferedReader消耗一些空間,所以典型的使用可以消耗更少的時間。

但衡量它,因爲性能結果取決於下列事項:

  • 大小,時間和位置讀操作(如果有什麼每個讀不在一個尋求剛剛過去的緩衝區長度? );
  • 計算硬件,原生軟件和JVM;
  • 您是否可以普遍預測那些適合您的應用程序;
  • 和(爲了得到 JIT編譯和其他運行時優化的好處)是否 您的讀取操作是可預測的或不可預測的,突發或持續的。

此外,性能結果的重要性取決於您的應用程序的功能要求。

您沒有提及維護軟件的問題,但通常值得考慮作爲軟件生命週期成本的主要部分。維護使用標準庫的代碼比重新實現相同功能的代碼更容易。