繁体   English   中英

这两种从用户那里获取输入的方式有什么区别?

[英]What is the difference between these two ways of taking input from user?

这两种从用户那里获取输入的方式有什么区别?

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num=Integer.parseInt(br.readLine());

Scanner sc = new Scanner(System.in);
int num=sc.nextInt();

这里假设包io和util被相应地导入。

这些只是两只完全不同的动物。 从流中读取时,您正在读取简单的数量...字符,字节,行。 然后,如您所示,您必须添加其他代码以更高级别的方式解释这些数量。

根据扫描仪的文档:

一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。

因此,Scanner在流之上添加了另一级功能。 填充输入。 它将输入的数据分开,并尝试以各种方式解释它,而不仅仅是字节或行。 如果使用简单的流,扫描程序将为您提供很多功能,您必须编写自己的代码。

为了更明确地回答您的特定问题...两个建议的代码块都给您所需的结果吗? 如果是这样,并且如果您不打算继续从流中读取任何其他内容,那么使用Scanner可能会过头。 如果您要继续操作并继续从流中读取整数,则最好使用原始流。 但是,如果您接下来要读取一行文本,一个浮点值或其他内容,则Scanner可能就是您想要的。 扫描仪具有处理换行符的技巧。 您必须自己使用基本流来做到这一点。

BufferedReader是

  1. 较旧
  2. 大(8 KB)
  3. 同步(使其变慢)
  4. 仅读取字符串。

扫描仪处于

  1. 小缓冲区(1 KB)
  2. 未同步
  3. 可以解析用户输入并读取一个与String分开的int,short,byte,float,long和double的整数。

请注意,使用正则表达式时Scanner速度较慢,这会使BufferedReader读取String的速度更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM