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

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

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

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

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

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

 // Code using Scanner Class
import java.util.Scanner;
class Differ
{
public static void main(String args[])
{
Scanner scn = new Scanner(System.in);
System.out.println("Enter an integer");
int a = scn.nextInt();
System.out.println("Enter a String");
String b = scn.nextLine();
System.out.printf("You have entered:- "
+ a + " " + "and name as " + b);
}
}
 

Input:

50 
Geek

Output:

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

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

 // Code using BufferedReader Class
import java.io.*;
class Differ
{
public static void main(String args[])
throws IOException
{
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Enter an integer");
int a = Integer.parseInt(br.readLine());
System.out.println("Enter a String");
String b = br.readLine();
System.out.printf("You have entered:- " + a +
" and name as " + b);
}
}
 

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

转:Java中Scanner类和BufferReader类之间的区别的更多相关文章

  1. java中静态代理跟动态代理之间的区别

    文章转载于:http://www.cnblogs.com/xiaoluo501395377/p/3383130.html 在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另 ...

  2. Java中String、StringBuffer和StringBuilder之间的区别

    String在Java中是字符串常量 例如 String str = "abc"; str = str + 1; System.out.println(str); 结果将是abc1 ...

  3. Java中是否可以调用一个类中的main方法?

    前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...

  4. Java中必须了解的常用类

    1.Java的包装类 基本数据类型我们都很熟悉,例如:int.float.double.boolean.char等,基本数据类型不具备对象的特征,不能调用方法,一般能实现的功能比较简单,为了让基本数据 ...

  5. Java中使用 Long 表示枚举类

    Java中使用 Long 表示枚举类 在日常的开发过程中,很多时候我们需要枚举类(enum)来表示对象的各种状态,并且每个状态往往会关联到指定的数字,如: private enum Color { R ...

  6. java中常用的包、类、以及包中常用的类、方法、属性----sql和text\swing

    java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.sql.*; java.text.*; java.a ...

  7. JAVA中的集合容器操作类

    目录 JAVA中的集合容器操作类 List集合 ArrayList的操作方法说明 LinkedList Stack Set Map Queue 总结 JAVA中的集合容器操作类 Java容器类库总共分 ...

  8. Java中各种集合(字符串类)的线程安全性!!!

    Java中各种集合(字符串类)的线程安全性!!! 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读 ...

  9. Java中的集合和常用类

    Java中的常用类: ▪ Object类 ▪ Math类 ▪ String类和StringBuffer类(字符串) ▪ 8种基本类型所对应的包装类 ▪ java.util包中的类——Date类 Obj ...

  10. JAVA基础——Java 中必须了解的常用类

    Java中必须了解的常用类 一.包装类 相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性的,比如基本类型不 ...

随机推荐

  1. GitHub网站操作

    1.建立新的仓库 2.添加文件 3.新建一个分支 4.删除仓库

  2. 【XMPP】基于XMPP的即时通讯解决方案

    什么是XMPP 介绍XMPP之前,先来看看GTalk. GTalk是Google推出的IM(Instant Messaging,即时通讯)软件,类似于QQ和MSN. 从技术角度来说,GTalk与QQ和 ...

  3. Python3实现Win10桌面背景自动切换

    [本文出自天外归云的博客园] 得空写了个自动切换桌面背景图片的小程序.再不写python就要扔键盘了,对vue还有那么一点好感,天天php真是有够烦. 准备工作 准备个文件夹放在桌面上,平时看到什么高 ...

  4. 基于jQuery鼠标滚轮滑动到页面节点部分

    基于jQuery鼠标滚轮滑动到页面节点部分.这是一款基于jQuery+CSS3实现的使用鼠标滚轮或者手势滑动到页面节点部分特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: &l ...

  5. Java四类八种数据类型

    http://www.cnblogs.com/simplefrog/archive/2012/07/15/2592011.html 第一类:逻辑型boolean 第二类:文本型char 第三类:整数型 ...

  6. Spring Security 之Http Basic认证

    使用Spring Security进行http Basic认证非常简单,直接配置即可使用,如下: <security:http> <security:http-basic>&l ...

  7. 环回接口---loopback

    尽管在网上查了不少资料,但依然未找到全面的解释,最近给县局作岗位认证培时, 忽然间想通了些问题,很多疑问迎刃而解.以下是我对环回地址及环回接口的一些认识,供大家参考交流:一.环回接口为了标识和管理网络 ...

  8. python 简单的server请求

    1.代码 #!/usr/bin/env python3 # -*- coding: utf-8 -*- # __author henry # __date 2018/11/4 from wsgiref ...

  9. 如何把光盘制作成ISO镜像文件

    如何把一张光盘转换成为ISO的镜像文件呢,这需要借助软件的力量. 下面来简单的介绍下吧. 工具/原料 UltraISO软碟通软件. 光驱 方法/步骤 下载并安装UltraISO软碟通软件. 插入要做的 ...

  10. python -u 启动python文件的作用,PYTHONUNBUFFERED环境变量的作用

    python -u 启动python文件的作用是不缓存,直接把输出重定向到文件,比如nohup启动什么的,如果不使用-u启动,那么程序中的print和日志什么的,可能不会非常及时的重定向到out文件, ...