2014-10-07 50 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

此外,您可以指定缓冲区大小,这非常方便。