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

网友投稿 224 2023-07-09


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

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()方法RppMvjE是这些方法,nextInt(),nextFloat(), nextByte(), nextShort(), nextDouble(), nextLong(), next()。

在BufferReader类中就没有那种问题。这种问题仅仅出现在Scanner类中,由于nextXXX()方法忽略***换行符***,但是,nextLine()并不忽略它。如果我们在nextXXX()方法和nextLine()方法之间使用超过一个以上的nextLine(RppMvjE)方法,这个问题将不会出现了;因为nextLine()把换行符消耗了。可以参考这个程序的正确写法(http://code.geeksforgeeks.org/CErAhD)。这个问题和C/C++(http://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类的不同点(非常详细),希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:图文详解JAVA实现哈夫曼树
下一篇:学习Angular中作用域需要注意的坑
相关文章

 发表评论

暂时没有评论,来抢沙发吧~