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

來源:互聯網
上載者:User

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

java.util.Scanner類是一個簡單的文本掃描類,它可以解析基礎資料型別 (Elementary Data Type)和字串。它本質上是使用Regex去讀取不同的資料類型。

Java.io.BufferedReader類為了能夠高效的讀取字元序列,從字元輸入資料流和字元緩衝區讀取文本。

下面是兩個類的不同之處:

當nextLine()被用在nextXXX()之後,用Scanner類有什麼問題

嘗試去猜測下面代碼的輸出內容;

// Code using Scanner Classimport 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:

50Geek

Output:

Enter an integerEnter a StringYou have entered:- 50 and name as


讓我們嘗試使用BufferReader類,並且使用相同的輸入

// Code using BufferedReader Classimport 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:

50Geek

Output:

Enter an integerEnter a Stringyou 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

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







相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.