BufferedReader vs控制台vs扫描仪
嗨,我是新来的Java
,我想知道什么是最好的select来读取控制台中的用户input,据我所知有3种方式来做到这一点:
-
Console console = System.console();
-
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
-
Scanner reader = new Scanner(System.in);
我应该select哪一个? 为什么这一个,而不是其他的?
的BufferedReader
- 自Java 1.1以来
- 抛出检查exception
- 可以读取字符,字符数组和行
- 快速
扫描器
- 自Java 1.5以来
- 不抛出检查的exception
- 可以读取行,空格分隔的令牌,正则expression式分隔的令牌和数字
- 难以阅读单个字符
安慰
- 自Java 1.6以来
- 不抛出检查的exception
- 可以读取线路
- 底层的阅读器可以读取字符和字符数组(停在行边界)
- 并不总是可用的(例如Eclipse )
- 可以读取密码(即读取而不显示字符)
build议:扫描仪
阅读数字的方法是非常有用的。 exception是未经检查的,所以你不必编写样板化的try / catch块。
在这些旁边还可以使用datainputstream等
现在,BufferedReader从字符inputstream中读取文本,缓冲字符,以便高效地读取字符,数组和行。 缓冲区大小可以被指定,或者可以使用默认大小。 默认值对于大多数目的而言足够大。
Scanner是一个简单的文本扫描程序,它可以使用正则expression式来分析原始types和string。 扫描器使用分隔符模式将input分为令牌,缺省情况下符合空格。 然后可以使用各种下一种方法将得到的令牌转换为不同types的值。 扫描器用于从stream的内容parsing令牌,而BufferedReader只是读取stream,不做任何特殊的parsing。
也检查下面的链接,它一定会帮助你…….
控制台类尝试实现平台无关的方式来处理控制台input。 所有的操作系统都有一个控制台,但是它们在执行时是不同的。 所以Console类为您提供了一个Java平台独立的运行时类来访问密码input等内容。
扫描器用于从stream的内容parsing令牌,而BufferedReader只是读取stream,不做任何特殊的parsing。