2014-10-07 51 views
1

看看Java教程,看起來你必須在聲明掃描器時包裝多層對象,例如http://docs.oracle.com/javase/tutorial/essential/io/scanning.html聲明掃描器讀取system.in

s = new Scanner(new BufferedReader(new FileReader("xanadu.txt"))); 

既有BufferedReaderFileReader。但是,如果我正在閱讀System.in,我是否需要/有這樣做的好處嗎?這兩個選項的行爲有何不同?

Scanner s = new Scanner(new BufferedReader(new InputStreamReader(
      System.in))); 

VS

Scanner s = new Scanner(System.in); 
+1

雖然緩衝可能有助於大文件,但我沒有看到使用鍵盤輸入('System.in')的優勢。爲了防止將來出現問題,當爲System.in打開一個'Scanner'時,要麼在代碼的最後(在讀完所有內容後)關閉它,要麼根本不關閉。 – 2014-10-07 04:16:21

+0

System.in也可以使用重定向來自文件 – kichik 2014-10-08 16:27:54

回答

1

差異在於效率。如果正確使用BufferedReader可防止從文件讀取的字節被轉換爲字符,然後返回。所以推薦使用BufferedReader

此外,您可以指定緩衝區大小,這非常方便。