Java中Scanner類和BufferReader類之間的區(qū)別

java.util.Scanner類是一個(gè)簡(jiǎn)單的文本掃描類救赐,它可以解析基本數(shù)據(jù)類型和字符串畏铆。它本質(zhì)上是使用正則表達(dá)式去讀取不同的數(shù)據(jù)類型分冈。

Java.io.BufferedReader類為了能夠高效的讀取字符序列服鹅,從字符輸入流和字符緩沖區(qū)讀取文本讯赏。

下面是兩個(gè)類的不同之處:

當(dāng)nextLine()被用在nextXXX()之后繁扎,用Scanner類有什么問(wèn)題

嘗試去猜測(cè)下面代碼的輸出內(nèi)容育勺;

// 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類中如果我們?cè)谶@任何7個(gè)nextXXX()方法之后調(diào)用nextLine()方法野建,這nextLine()方法不能夠從控制臺(tái)讀取任何內(nèi)容属划,并且,這游標(biāo)不會(huì)進(jìn)入控制臺(tái)候生,它將跳過(guò)這一步同眯。這nextXXX()方法是這些方法,nextInt(),nextFloat(), nextByte(), nextShort(), nextDouble(), nextLong(), next()唯鸭。

在BufferReader類中就沒(méi)有那種問(wèn)題须蜗。這種問(wèn)題僅僅出現(xiàn)在Scanner類中,由于nextXXX()方法忽略換行符目溉,但是明肮,nextLine()并不忽略它。如果我們?cè)趎extXXX()方法和nextLine()方法之間使用超過(guò)一個(gè)以上的nextLine()方法缭付,這個(gè)問(wèn)題將不會(huì)出現(xiàn)了柿估;因?yàn)閚extLine()把換行符消耗了∠菝ǎ可以參考這個(gè)程序的正確寫法秫舌。這個(gè)問(wèn)題和C/C++中的scanf()方法緊跟gets()方法的問(wèn)題一樣。

其他的不同點(diǎn):

  • BufferedReader是支持同步的绣檬,而Scanner不支持舅巷。如果我們處理多線程程序,BufferedReader應(yīng)當(dāng)使用河咽。
  • BufferedReader相對(duì)于Scanner有足夠大的緩沖區(qū)內(nèi)存。
  • Scanner有很少的緩沖區(qū)(1KB字符緩沖)相對(duì)于BufferedReader(8KB字節(jié)緩沖)赋元,但是這是綽綽有余的忘蟹。
  • BufferedReader相對(duì)于Scanner來(lái)說(shuō)要快一點(diǎn)飒房,因?yàn)镾canner對(duì)輸入數(shù)據(jù)進(jìn)行類解析,而BufferedReader只是簡(jiǎn)單地讀取字符序列媚值。

原文鏈接:Difference between Scanner and BufferReader Class in Java

翻譯:crane-yuan

[ 轉(zhuǎn)載請(qǐng)保留原文出處狠毯、譯者和譯文鏈接。]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末褥芒,一起剝皮案震驚了整個(gè)濱河市嚼松,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锰扶,老刑警劉巖献酗,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異坷牛,居然都是意外死亡罕偎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門京闰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)颜及,“玉大人,你說(shuō)我怎么就攤上這事蹂楣∏握荆” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵痊土,是天一觀的道長(zhǎng)肄扎。 經(jīng)常有香客問(wèn)我,道長(zhǎng)施戴,這世上最難降的妖魔是什么反浓? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮赞哗,結(jié)果婚禮上雷则,老公的妹妹穿的比我還像新娘。我一直安慰自己肪笋,他們只是感情好月劈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著藤乙,像睡著了一般猜揪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坛梁,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天而姐,我揣著相機(jī)與錄音,去河邊找鬼划咐。 笑死拴念,一個(gè)胖子當(dāng)著我的面吹牛钧萍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播政鼠,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼风瘦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了公般?” 一聲冷哼從身側(cè)響起万搔,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎官帘,沒(méi)想到半個(gè)月后瞬雹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遏佣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年挖炬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片状婶。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡意敛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出膛虫,到底是詐尸還是另有隱情草姻,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布稍刀,位于F島的核電站撩独,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏账月。R本人自食惡果不足惜综膀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望局齿。 院中可真熱鬧剧劝,春花似錦、人聲如沸抓歼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谣妻。三九已至萄喳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蹋半,已是汗流浹背他巨。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人染突。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓匪傍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親觉痛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法茵休,類相關(guān)的語(yǔ)法薪棒,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法榕莺,異常的語(yǔ)法俐芯,線程的語(yǔ)...
    子非魚_t_閱讀 31,623評(píng)論 18 399
  • Java 語(yǔ)言支持的類型分為兩類:基本類型和引用類型。整型(byte 1, short 2, int 4, lon...
    xiaogmail閱讀 1,347評(píng)論 0 10
  • tags:io categories:總結(jié) date: 2017-03-28 22:49:50 不僅僅在JAVA領(lǐng)...
    行徑行閱讀 2,174評(píng)論 0 3
  • 轉(zhuǎn)義字符 在字符表中有兩大類字符集钉鸯,一類是Control Character吧史,一類是Printable Chara...
    獅_子歌歌閱讀 8,290評(píng)論 0 7
  • JavaScript 測(cè)試和捕捉 try 語(yǔ)句允許我們定義在執(zhí)行時(shí)進(jìn)行錯(cuò)誤測(cè)試的代碼塊。catch 語(yǔ)句允許我們定...
    Simon_s閱讀 270評(píng)論 0 0