java.util.Scannerclass是一个简单的文本扫描程序, 可以解析原始类型和字符串。它在内部使用正则表达式读取不同的类型。
Java.io.BufferedReader类从字符输入流中读取文本, 缓冲字符, 以便有效读取字符序列
以下是上述两者之间的区别。
【Java中Scanner和BufferReader类之间的区别】在nextXXX()之后使用nextLine()时, 扫描仪出现问题
尝试猜测以下代码的输出:
//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);
}
}
输入如下:
50
Geek
输出如下:
Enter an integer
Enter a String
You have entered:- 50 and name as
让我们使用Buffer类和相同的Input尝试相同的操作
//Code using Buffer 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);
}
}
输入如下:
50
Geek
输出如下:
Enter an integer
Enter a String
you have entered:- 50 and name as Geek
在Scanner类中, 如果我们在七个nextXXX()方法中的任何一个之后调用nextLine()方法, 则nextLine()不会从控制台读取值, 并且光标不会进入控制台, 它将跳过该步骤。 nextXXX()方法是nextInt(), nextFloat(), nextByte(), nextShort(), nextDouble(), nextLong(), next()。
在BufferReader类中, 没有这种类型的问题。由于nextXXX()方法忽略换行符, 并且nextLine()仅读取直到第一个换行符, 因此仅对于Scanner类会出现此问题。如果我们在nextXXX()和nextLine()之间再使用一次nextLine()方法的调用, 则不会发生此问题, 因为nextLine()将消耗换行符。
也可以通过使用next()代替nextLine()来获取字符串输入来解决此问题, 如图所示
- BufferedReader是同步的, 而Scanner不同步。如果我们使用多个线程, 则应使用BufferedReader。
- BufferedReader的缓冲区内存比Scanner大得多。
- 与BufferedReader(8KB字节缓冲区)相比, 扫描仪有一个小缓冲区(1KB字符缓冲区), 但绰绰有余。
- 与扫描仪相比, BufferedReader要快一些, 因为扫描仪会解析输入数据, 而BufferedReader只是读取字符序列。
推荐阅读
- Servlet和JSP之间有什么区别()
- Docker命令RUN、CMD和ENTRYPOINT之间的区别
- 可路由和不可路由协议之间的区别
- C#中Ref和Out关键字之间的区别
- C#中的readonly和const关键字之间的区别
- RDBMS和ORDBMS之间有哪些区别()
- 数据库|做 SQL 性能优化真是让人干瞪眼
- Java每日一练|用Java定义圆类并调用方法
- JavaSE系列详解|Java中的方法引用--【基本使用详解】