2016-04-21 81 views
1

我正在從C++切換到Java,現在要通過一些關於Java IO的文檔。所以,如果我想從緩衝的字節流使緩衝字符流,我可以通過兩種方式做到這一點:Java.io從非緩衝字節1獲取緩衝字符流的兩種方法

Reader input1 = new BufferedReader(new InputStreamReader(new FileInputStream("Xanadu.txt"))); 

Reader input2 = new InputStreamReader(new BufferedInputStream(new FileInputStream("Xanadu.txt"))); 

所以我可以把它的性格和在此之後的緩衝或反之亦然。 他們之間有什麼區別,哪個更好?

回答

0

功能上,沒有區別。這兩個版本的行爲方式相同。

性能可能有所不同,第一個版本可能會比第二個版本更快一點,當您一次讀取Reader中的字符時。

  • 在第一個版本中,一個完整的數據緩衝區將在一次操作中從字節轉換爲字符。然後Reader上的每個read()調用都將直接從字符緩衝區獲取字符。

  • 在第二個版本中,每個read()呼叫上Reader對輸入的流的一個或多個read()呼叫和轉換隻讀爲字符的那些字節。


如果我要實現這個(準確)的功能,我會做這樣的:

Reader input = new BufferedReader(new FileReader("Xanadu.txt")); 

,讓FileReader處理下解碼字節到字符引擎蓋。

有一種情況可以使用InputStreamReader,但僅限於需要明確指定字符集到字符轉換的字符集。