个性化阅读
专注于IT技术分析

Java中Scanner和BufferReader类之间的区别

java.util.Scannerclass是一个简单的文本扫描程序, 可以解析原始类型和字符串。它在内部使用正则表达式读取不同的类型。

Java.io.BufferedReader类从字符输入流中读取文本, 缓冲字符, 以便有效读取字符序列

以下是上述两者之间的区别。

在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只是读取字符序列。

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请发表评论。

赞(0) 打赏
未经允许不得转载:srcmini » Java中Scanner和BufferReader类之间的区别
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏