當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java Scanner和BufferedReader的區別用法及代碼示例


在 Java 中,Scanner 和 BufferedReader 類是用作讀取輸入的方式的源。 Scanner class 是一個簡單的文本掃描器,可以解析原始類型和字符串。它內部使用正則表達式來讀取不同類型,而另一方麵 BufferedReader class 從 character-input 流中讀取文本,緩衝字符以便高效讀取字符序列

奇怪的差異在於通過 next() 方法讀取不同的輸入方式,該方法在下麵的程序中通過類似的輸入集得到了證明。

示例 1:

Java


// Java Program to Illustrate Scanner Class
// Importing Scanner class from
// java.util package
import java.util.Scanner;
// Main class
class GFG {
    // Main driver method
    public static void main(String args[])
    {
        // Creating object of Scanner class to
        // read input from keyboard
        Scanner scn = new Scanner(System.in);
        System.out.println("Enter an integer & a String");
        // Using nextInt() to parse integer values
        int a = scn.nextInt();
        // Using nextLine() to parse string values
        String b = scn.nextLine();
        // Display name and age entered above
        System.out.printf("You have entered:- " + a + " "
                          + "and name as " + b);
    }
}

輸出:

Enter an integer & a String
10 John
You have entered:- 10 and name as  John

讓我們嘗試使用 Buffer 類和下麵相同的輸入進行相同的操作,如下所示:

示例 2:

Java


// Java Program to Illustrate BufferedReader Class
// Importing required class
import java.io.*;
// Main class
class GFG {
    // Main driver method
    public static void main(String args[])
        throws IOException
    {
        // Creating object of class inside main() method
        BufferedReader br = new BufferedReader(
            new InputStreamReader(System.in));
        System.out.println("Enter an integer");
        // Taking integer input
        int a = Integer.parseInt(br.readLine());
        System.out.println("Enter a String");
        String b = br.readLine();
        // Printing input entities above
        System.out.printf("You have entered:- " + a
                          + " and name as " + b);
    }
}

輸出:

輸出說明:在 Scanner 類中,如果我們調用 nextLine()方法在七個中的任何一個之後nextXXX()方法那麽nextLine()不會從控製台讀取值,並且光標不會進入控製台,它將跳過該步驟。 nextXXX()方法為nextInt()、nextFloat()、nextByte()、nextShort()、nextDouble()、nextLong()、next()。

在BufferReader課程中不存在此類問題。此問題僅發生在 Scanner 類中,因為 nextXXX() 方法忽略換行符,而 nextLine() 隻讀取第一個換行符。如果我們在nextXXX()和nextLine()之間再調用一次nextLine()方法,那麽就不會出現這個問題,因為nextLine()會消耗換行符。

Tip: See this for the corrected program. This problem is same as scanf() followed by gets() in C/C++. This problem can also be solved by using next() instead of nextLine() for taking input of strings as shown 這裏.

以下是 Java 中 Scanner 和 BufferedReader 類之間的主要區別

  • BufferedReader 是同步的,而掃描儀不是同步的。如果我們使用多個線程,則應使用BufferedReader。
  • BufferedReader 的緩衝存儲器比掃描儀大得多。
  • 掃描儀有一個小緩衝區(1KB 字符緩衝區),而不是 BufferedReader(8KB 字節緩衝區),但它已經足夠了。
  • BufferedReader 與 Scanner 相比要快一些,因為 Scanner 會解析輸入數據,而 BufferedReader 隻是讀取字符序列。


相關用法


注:本文由純淨天空篩選整理自佚名大神的英文原創作品 Difference Between Scanner and BufferedReader Class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。