程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java中Scanner類和BufferReader類之間的區別,javabufferreader

Java中Scanner類和BufferReader類之間的區別,javabufferreader

編輯:JAVA綜合教程

Java中Scanner類和BufferReader類之間的區別,javabufferreader


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只是簡單地讀取字符序列。


原文鏈接:Difference between Scanner and BufferReader Class in Java(http://www.geeksforgeeks.org/difference-between-scanner-and-bufferreader-class-in-java/)

翻譯:crane-yuan

[ 轉載請保留原文出處、譯者和譯文鏈接。]







  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved