我遇到过这个话题How to get basic user input for java虽然这个问题的答案已经足够,但我想知道为什么有这么多不同的方式来读取用户输入。 特别是这些不同的用户输入读取方法的优缺点是什么?什么时候使用其他方式才有意义呢?
这些帖子中提到的可能方式。
- 扫描仪课程
- BufferedReader和InputStreamReader类
- DataInputStream类
- 控制台类
醇>
答案 0 :(得分:3)
它们都打算用于不同的事情。我会尽力解释,但我并不完全理解这些文档,而且我没有广泛使用这些文档,所以如果你发现任何错误,请告诉我。
Scanner
类用于处理几乎任何流的输入,并为开发人员提供了一种简单易用的方法来管理它,而无需学习太多类。这是相当基本的,但大部分时间,它足够 - 例如,如果你只是想以简单易学的方式获得用户输入,Scanner
就是你想要的。
BufferedReader
类旨在快速读取文件,但会牺牲内存。它意味着成为其他更简单的类的包装器,如FileInputStream
(技术上,任何类extends InputStream
),通过缓冲接下来的几个字节并从该数组中读取而不是直接读取流,并且仅当流到达缓冲区末尾时从流中读取。如果你对速度比低内存使用更感兴趣,你会想要这个 - 尽管除非你明确告诉它,否则它确实不会使用更多的内存。
DataInputStream
是一种更通用的数据输入类。如果您只想从流中读取基元 - 而不是直接读取各个位并组成相应的类型,这为您提供了一种简单的方法。 This page是文档所说的,可以获取有关方法实际工作方式的更多信息。
Console
类明确用于 c ommand l ine i 接口(CLI)程序 - 也就是说,用于从控制台读取数据和向控制台写入数据。这就像Scanner
- 一个简单易学的课程,可以完成基本任务。
在一个句子中,它们用于不同的任务,你使用哪一个应该由你想要做的事情决定。
答案 1 :(得分:0)
Scanner是Java中最友好的输入阅读器,我喜欢它! BufferedReader和InputStreamReader都用于输入Reader和Worked也有文件,有些东西比如写文件的可读输入等等。 我不使用其他两个,因为最重要的IO类是Scanner和BufferedReader ... 您也可以使用System.IO读取输入,但我更喜欢自己的扫描仪