【问题标题】:BufferedReader vs Console vs ScannerBufferedReader vs Console vs Scanner
【发布时间】:2013-07-12 07:14:31
【问题描述】:

您好,我是 Java 的新手,我想知道在控制台中读取用户输入的最佳选择是什么,据我所知有 3 种方法:

  1. Console console = System.console();
  2. BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
  3. Scanner reader = new Scanner(System.in);

我应该选择哪一个?为什么是那个而不是另一个?

【问题讨论】:

  • 对于任何琐碎的程序,只需使用扫描仪。我以前从未见过使用过控制台,并且在处理文件之类的东西时使用了 InputStream/Reader。

标签: java java-io


【解决方案1】:

BufferedReader

Scanner

Console

推荐:扫描仪

读取数字的方法非常有用(尽管beware when using nextInt() etc. followed by nextLine())。异常是未经检查的,因此您不必编写样板的 try/catch 块。

【讨论】:

  • 小心使用扫描仪,当您有新的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 只是读取流并且不做任何特殊的解析。

    【讨论】:

      猜你喜欢
      • 2010-10-16
      • 1970-01-01
      • 2010-10-18
      • 2015-06-09
      • 2013-04-10
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多