BufferedReader vs控制台vs扫描仪

嗨,我是新来的Java ,我想知道什么是最好的select来读取控制台中的用户input,据我所知有3种方式来做到这一点:

  1. Console console = System.console();
  2. BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
  3. 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。

也检查下面的链接,它一定会帮助你…….

http://www.javawebtips.com/50474/

控制台类尝试实现平台无关的方式来处理控制台input。 所有的操作系​​统都有一个控制台,但是它们在执行时是不同的。 所以Console类为您提供了一个Java平台独立的运行时类来访问密码input等内容。

扫描器用于从stream的内容parsing令牌,而BufferedReader只是读取stream,不做任何特殊的parsing。