这些用户输入读取方式有何不同?

我遇到了这个主题如何获得java的基本用户输入 ,虽然这个特定问题的答案已经足够,但我想知道为什么有这么多不同的方法来读取用户输入。 特别是这些不同的用户输入读取方式的优缺点是什么? 什么时候使用一个而不是另一个?

这些post中提到的可能方式。

  1. 扫描仪课程
  2. BufferedReader和InputStreamReader类
  3. DataInputStream类
  4. 控制台类

它们都打算用于不同的事情。 我会尽力解释,但我并不完全理解这些文档,而且我没有广泛使用这些文档,所以如果你发现任何错误,请告诉我。

  1. Scanner类用于处理几乎任何流的输入,并为开发人员提供了一种简单易用的方法来管理它,而无需学习太多类。 这是相当基本的,但大多数时候,它足够了 – 例如,如果你只是想以简单易学的方式获得用户输入, Scanner就是你想要的。

  2. BufferedReader类旨在快速读取文件,但代价是内存。 它的目的是成为其他更简单的类的包装器,比如FileInputStream (技术上,任何extends InputStream类),通过缓冲接下来的几个字节并从该数组读取而不是直接读取流,并且仅在流到达时从流中读取缓冲区的结尾。 如果你对速度比低内存使用更感兴趣,你会想要这个 – 虽然除非你明确告诉它,否则它确实不会使用更多的内存。

  3. DataInputStream是数据的更通用的输入类。 如果您只想从流中读取基元 – 而不是直接读取各个位并组成相应的类型,这为您提供了一种简单的方法。 此页面是文档所说的,可以获取有关方法实际工作方式的更多信息。

  4. Console类显式用于命令接口(CLI)程序 – 即,用于从控制台读取数据和向控制台写入数据。 它就像Scanner一个简单易学的课程,用于完成基本任务。

在一个句子中,它们用于不同的任务,你使用哪一个应该由你想要做的事情决定。

Scanner是Java中最友好的输入阅读器,我喜欢它! BufferedReader和InputStreamReader都用于输入Reader和Worked也有文件,有些东西比如写文件的可读输入等等。我不使用其他两个因为最重要的IO类是Scanner和BufferedReader …你可以也可以使用System.IO读取输入,但我更喜欢Scanner