BufferedReader vs Console vs Scanner
Posted
技术标签:
【中文标题】BufferedReader vs Console vs Scanner【英文标题】: 【发布时间】:2013-07-12 07:14:31 【问题描述】:您好,我是 Java
的新手,我想知道在控制台中读取用户输入的最佳选择是什么,据我所知有 3 种方法:
Console console = System.console();
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
Scanner reader = new Scanner(System.in);
我应该选择哪一个?为什么是那个而不是另一个?
【问题讨论】:
对于任何琐碎的程序,只需使用扫描仪。我以前从未见过使用过控制台,并且在处理文件之类的东西时使用了 InputStream/Reader。 【参考方案1】:BufferedReader
Java 1.1 起 抛出checked exceptions 可以读取single chars、char arrays和lines 快速Scanner
Java 1.5 起 引发未经检查的异常 可以读取lines、numbers、whitespace-delimited tokens、regex-delimited tokens 难以read single charactersConsole
Java 1.6 起 引发未经检查的异常 并非始终可用(例如,input/output is redirected 和 in Eclipse) 可以阅读lines Underlying reader 可以读取单个字符和字符数组(但在行边界处停止) 可以阅读passwords(即阅读时不显示字符)推荐:扫描仪
读取数字的方法非常有用(尽管beware when using nextInt() etc. followed by nextLine())。异常是未经检查的,因此您不必编写样板的 try/catch 块。
【讨论】:
也阅读***.com/questions/2231369/…的答案 小心使用扫描仪,当您有新的Scanner(System.in)
并关闭扫描仪时,System.in 也会被关闭。如果您想再次在某处使用new Scanner(System.in)
,那么尝试读取用户输入将引发异常。目前我正在尝试JLine
,什么可以读取密码并打印给定的掩码。
如果混合使用 nextInt() 和 nextLine() 也可以使用扫描仪,需要小心,因为 nextLine() 会从输入中删除 bnewline 字符,但 nextInt() 不会!
Console
在标准输出/输入被重定向时不可用 ||使用Scanner
解析是本地化
@user16320675 谢谢,我已经更新了我的答案,提到如果输入/输出被重定向,控制台将不可用。 Scanner 的本地化是一个好点,但我认为答案中不值得一提,因为 BufferedReader 和 Console 甚至不支持读取数字,因此与它们相比,本地化并不真正相关。 (还要感谢@MangatRaiModi 关于混合 Scanner.nextInt() 和 nextLine() 的警告,我已将其添加到答案中。)【参考方案2】:
除此之外,您还可以使用 datainputstream 等。
现在 BufferedReader 从字符输入流中读取文本,缓冲字符,以便高效读取字符、数组和行。可以指定缓冲区大小,也可以使用默认大小。对于大多数用途,默认值足够大。
Scanner 是一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。 Scanner 使用分隔符模式将其输入分解为标记,默认情况下匹配空格。然后可以使用各种 next 方法将生成的标记转换为不同类型的值。 Scanner 用于从流的内容中解析令牌,而 BufferedReader 只是读取流,不做任何特殊的解析。
还请查看下面的链接,它一定会对您有所帮助.......
http://www.javawebtips.com/50474/
【讨论】:
【参考方案3】:控制台类以独立于平台的方式实现,以处理不同操作系统的控制台输入。所有操作系统都有一个控制台/外壳,但它们在实现上完全不同。因此,Console 类为您提供了一个独立于 Java 平台的运行时类来访问密码输入等内容。
Scanner 用于从流的内容中解析令牌,而 BufferedReader 只是读取流并且不做任何特殊的解析。
【讨论】:
以上是关于BufferedReader vs Console vs Scanner的主要内容,如果未能解决你的问题,请参考以下文章
document.write vs console.log vs innerHTML
VS 2010 post build,show application console