Java中Scanner类与BufferReader类的不同点(非常详细)

作者:crane-yuan 时间:2023-07-07 01:21:18 

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()把换行符消耗了。可以参考这个程序的正确写法(http://code.geeksforgeeks.org/CErAhD)。这个问题和C/C++(http://www.geeksforgeeks.org/problem-with-scanf-when-there-is-fgetsgetsscanf-after-it/)中的scanf()方法紧跟gets()方法的问题一样。

其他的不同点:

•BufferedReader是支持同步的,而Scanner不支持。如果我们处理多线程程序,BufferedReader应当使用。

•BufferedReader相对于Scanner有足够大的缓冲区内存。

•Scanner有很少的缓冲区(1KB字符缓冲)相对于BufferedReader(8KB字节缓冲),但是这是绰绰有余的。

•BufferedReader相对于Scanner来说要快一点,因为Scanner对输入数据进行类解析,而BufferedReader只是简单地读取字符序列。

以上所述是小编给大家介绍的Java中Scanner类与BufferReader类的不同点(非常详细)网站的支持!

来源:http://www.cnblogs.com/VioletLove/archive/2016/08/17/5778825.html

标签:java,scanner,bufferreader
0
投稿

猜你喜欢

  • C#用链式方法表达循环嵌套

    2023-04-14 06:54:23
  • Kotlin Navigation可视化开发详解

    2022-10-18 10:55:56
  • Android如何判断一个点在不在多边形区域内

    2023-07-06 14:06:13
  • Java的设计模式编程中迪米特法则的应用示例

    2022-10-29 01:34:35
  • Java基于Dijkstra算法实现校园导游程序

    2021-10-15 15:38:18
  • Android使用线程获取网络图片的方法

    2023-05-28 22:29:28
  • 深入理解Java设计模式之备忘录模式

    2023-09-20 06:16:43
  • 详解Mybatis框架SQL防注入指南

    2023-09-16 02:49:02
  • C#代码设置开机启动示例

    2021-12-16 17:53:07
  • BeanDefinitionRegistryPostProcessor如何动态注册Bean到Spring

    2023-11-24 12:56:16
  • java按钮控件数组实现计算器界面示例分享

    2021-09-12 22:37:59
  • C#对XML文件的各种操作实现方法

    2023-01-21 06:14:40
  • springboot 中整合mybatis多数据源不使用JPA

    2023-03-01 08:43:02
  • Android监听Home键和Back键的区别介绍

    2022-09-11 11:21:03
  • Java中ArrayList集合的常用方法大全

    2023-09-01 15:23:30
  • MyBatis Generator去掉生成的注解

    2022-08-29 22:01:03
  • Android自定义view实现车载可调整轨迹线

    2022-12-06 11:22:21
  • android 7自定义相机预览及拍照功能

    2023-01-29 06:56:34
  • 线程池中execute与submit的区别说明

    2023-03-18 23:09:04
  • 如何在springBoot下搭建日志框架

    2021-07-01 03:41:44
  • asp之家 软件编程 m.aspxhome.com