转:Java中Scanner类和BufferReader类之间的区别

转:Java中Scanner类和BufferReader类之间的区别

原文地址:https://blog.csdn.net/u014717036/article/details/52227782

 

java.util.Scanner类是一个简单的文本扫描类,它可以解析基本数据类型和字符串。它本质上是使用正则表达式去读取不同的数据类型。

Java.io.BufferedReader类为了能够高效的读取字符序列,从字符输入流和字符缓冲区读取文本。

下面是两个类的不同之处:

当nextLine()被用在nextXXX()之后,用Scanner类有什么问题

尝试去猜测下面代码的输出内容;

 1 // Code using Scanner Class
 2 import java.util.Scanner;
 3 class Differ
 4 {
 5      public static void main(String args[])
 6      {
 7          Scanner scn = new Scanner(System.in);
 8          System.out.println("Enter an integer");
 9          int a = scn.nextInt();
10          System.out.println("Enter a String");
11          String b = scn.nextLine();
12          System.out.printf("You have entered:- "
13                  + a + " " + "and name as " + b);
14      }
15 }

 

 

Input:

50 
Geek

Output:

Enter an integer Enter a String You have entered:- 50 and name as

让我们尝试使用BufferReader类,并且使用相同的输入

 1 // Code using BufferedReader Class
 2 import java.io.*;
 3 class Differ
 4 {
 5     public static void main(String args[])
 6                   throws IOException
 7     {
 8         BufferedReader br = new BufferedReader(new
 9         InputStreamReader(System.in));
10         System.out.println("Enter an integer");
11         int a = Integer.parseInt(br.readLine());
12         System.out.println("Enter a String");
13         String b = br.readLine();
14         System.out.printf("You have entered:- " + a +
15                           " and name as " + b);
16     }
17 }

 

Input:

50
Geek

Output:

Enter an integer Enter a String you have entered:- 50 and name as Geek

在Scanner类中如果我们在这任何7个nextXXX()方法之后调用nextLine()方法,这nextLine()方法不能够从控制台读取任何内容,并且,这游标不会进入控制台,它将跳过这一步。这nextXXX()方法是这些方法,nextInt(),nextFloat(), nextByte(), nextShort(), nextDouble(), nextLong(), next()。

在BufferReader类中就没有那种问题。这种问题仅仅出现在Scanner类中,由于nextXXX()方法忽略换行符,但是,nextLine()并不忽略它。如果我们在nextXXX()方法和nextLine()方法之间使用超过一个以上的nextLine()方法,这个问题将不会出现了;因为nextLine()把换行符消耗了。可以参考这个程序的正确写法。这个问题和C/C++中的scanf()方法紧跟gets()方法的问题一样。

其他的不同点:

  • BufferedReader是支持同步的,而Scanner不支持。如果我们处理多线程程序,BufferedReader应当使用。
  • BufferedReader相对于Scanner有足够大的缓冲区内存。
  • Scanner有很少的缓冲区(1KB字符缓冲)相对于BufferedReader(8KB字节缓冲),但是这是绰绰有余的。
  • BufferedReader相对于Scanner来说要快一点,因为Scanner对输入数据进行类解析,而BufferedReader只是简单地读取字符序列。

原文链接:Difference between Scanner and BufferReader Class in Java

翻译:crane-yuan

[ 转载请保留原文出处、译者和译文链接。]

——————— 本文来自 crane-yuan 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u014717036/article/details/52227782?utm_source=copy 

转载于:https://www.cnblogs.com/mumu122GIS/p/9718102.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101398.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • opencv中cvCircle的使用方法「建议收藏」

    opencv中cvCircle的使用方法「建议收藏」Circle,中文含义指:即圆形。cvCircle是指绘制圆形的一个程序函数。定义voidcvCircle(CvArr*img,CvPointcenter,intradius,CvScalarcolor,intthickness=1,intline_type=8,intshift=0);参数im

    2022年7月24日
    11
  • 2019版idea激活码99年破解方法

    2019版idea激活码99年破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    965
  • Owasp top10 小结[通俗易懂]

    Owasp top10 小结[通俗易懂]Owasptop101.SQL注入原理:web应用程序对用户输入的数据合法性没有过滤或者是判断,前端传入的参数是攻击者可以控制,并且参数带入数据库的查询,攻击者可以通过恶意的sql语句来实现对数据库的任意操作。2.失效的身份认证和会话管理原理:在开发web应用程序时,开发人员往往只关注Web应用程序所需的功能,所以常常会建立自定义的认证和会话方案。但是要正确的实现这些方案却是很难的。结果就在退出,密码管理,超时,密码找回,账户更新等方面存在漏洞。危害:由于存在以上的漏洞,恶意用户可能会窃取

    2022年5月28日
    74
  • MySQL自增主键值回溯问题

    MySQL自增主键值回溯问题平时我们使用MySQL时,通常每一个表都会有一个自增主键ID,每新增一条数据,ID值就会自增1。但在8.0之前版本的MySQL中,这个自增值会存在一个回溯的问题。例如,在一个新表中插入三条主键为1、2、3的数据行,这时候用SHOWCREATETABLE命令查看该表的AUTO_INCREMENT的值是4,这是没问题的。然后把ID=3的数据行删掉,再次查询AUTO_INCREMENT的值,依然是4,这也是没问题的。但如果重启一下MySQL,这个值就会变回3,而不是4,发生了回溯。这是因为AUTO_I

    2022年6月16日
    75
  • Oracle 11g安装及配置详解

    Oracle 11g安装及配置详解1、点击setup.exe文件2、处理[INS-13001]环境不满足最低要求(1)首先,打开解压后的database文件夹,找到stage文件夹,然后cvu,找到cvu_prereq.xml文件,用记事本打开,添加以下代码:<OPERATING_SYSTEMRELEASE="6.2"><VERSIONVALUE="3"/>&…

    2022年5月30日
    96
  • hadoop家族的各个成员

    hadoop家族的各个成员

    2021年11月28日
    36

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号