Forskjellen mellom BufferedReader og Scanner

Difference Between Bufferedreader



Tittel 1: Bruk av BufferedReader

Se først på følgende kode

import java.io.* public class Main { public static void main(String[] args) throws IOException { //Create a BufferedReader object, read in from the keyboard BufferedReader b1=new BufferedReader(new InputStreamReader(System.in)) //Create a BufferedReader object, read in from a text file BufferedReader b2= new BufferedReader(new FileReader('test.txt')) //Read a line of data separated by spaces and store it in a string array String[] srt=b1.readLine().split(' ') } }

BufferedReader-klassen ligger i java.io-pakken, så for å bruke denne klassen må du importere java.io-pakken:
importere java.io.BufferedReader。 ReadLine () -metoden returnerer alle tegnene som er skrevet inn av brukeren før du trykker på Enter-tasten, unntatt det siste Enter-returtegnet som ble trykket . Bruk readLine () -metoden til BufferedReader-objektet Må håndtere java.io.IOException unntak (Unntak) . Dataene som blir lest av BufferReader lagres i form av strenger. Hvis du trenger andre former for data, må du Tvungen konvertering



For å bruke BufferedReader til å lese data, trenger du et nytt InputStreamReader-objekt (visning av kildekode :)
x



Tittel 2: Bruk av skanner

  • Når du vil legge inn data i programmet i kommandolinjemodus, kan du bruke standardinngangsstrengobjektet System.in. Imidlertid bruker vi det ikke ofte direkte fordi Lesingen () levert av System.in kan bare lese en byte med data om gangen , Og det vi vanligvis bruker er å lese en streng eller et tall, så funksjonen som lesemetoden gir, er ikke veldig nyttig for oss.
  • I Java SE 6 kan du bruke skannerklassen for å få brukerinngang. Skannerklassen ligger i pakken java.util. Hvis du vil bruke Scanner for å få brukerinndata, kan du legge til import java.util.Scanner denne uttalelsen. Funksjonen ved import er å fortelle kompilatoren at vi vil bruke Scanne-klassen i pakken java.util.

Vanlige metoder for skanner:



import java.util.Scanner public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in)//Create Scanner class object, read data from the keyboard String t1=sc.nextLine()//Read the next line of data String t2=sc.next()//Read characters until the end of the input is judged sc.useDelimiter(' ')//If the string is separated by spaces, you need to read the spaces to continue reading or use an empty sc.nextLine() to skip the spaces int t3=sc.nextInt()//Convert the read string into an integer of type int double t4=sc.nextDouble()//Convert the read string into float type boolean t5=sc.nextBoolean()//Convert the read string into boolean type } }
  • Det skal bemerkes at forskjellen mellom neste () og nextLine () -metoder i Skanner
    1. NextLine () -metoden returnerer alle tegnene før Enter-tasten, og den kan få en streng med mellomrom.
    neste () vil automatisk eliminere mellomrommene før de gyldige tegnene, og bare returnere inngangstegnene, og kan ikke få en streng med mellomrom.
    2. Terminatoren for nextLine () -metoden er bare Enter-tasten.
    neste () Etter at du har angitt et gyldig tegn, blir mellomromstasten, Tab-tasten eller Enter-tasten angitt etter at den betraktes som en separator eller terminator.

  • Scanners hasNext () -metode:
    [Vis kildekode]:
    bilde
    [Metode forklaring] : Utførelsesprosessen av hasNext () -metoden er som følger: Når hasNext () kjøres, vil den først skanne om det er tegn i bufferen, og returnere true hvis det er noen tegn, og fortsette skanningen. Inntil skanningen er tom, returneres ikke false på dette tidspunktet, men metoden er blokkert og venter på at vi skal legge inn innhold og deretter fortsette å skanne. I dette tilfellet vil det alltid være i loop å vente.
    【Løsning】 : Bruk den overbelastede metoden med parametere, og returner true når det skannede tegnet samsvarer med parameterverdien.
    bilde

————————— For eksempel følgende kode —————————
[Før du endrer koden]
bilde
[Etter endring av koden]
bilde



Tittel 3: Forskjellen mellom de to

  • Det er en forskjell i om du kan lese mellomrom
    Skanneren får inndataene Grunnlaget er mellomromstegnet, inkludert mellomromstast, Tab-tast og Enter-tast , Skanneren kommer tilbake til neste inngang. Så ** Skanneren kan ikke angi mellomrom ( Med unntak av nextLine-metoden, som kan lese mellomromstegn, kan ingen andre metoder lese mellomrom, men hvis du ikke trenger det, trenger du ikke denne metoden. En spesiell forklaring er gitt til slutt ) ** Hvis du vil få en streng som inneholder mellomrom

    BufferedReader kan gjøre det, og readLine () -metoden returnerer alle tegn som er skrevet inn av brukeren før du trykker på Enter-tasten ( Inneholder mellomrom ), unntatt den sist trykkte Enter.

  • Og det er stor forskjell mellom de to når det gjelder effektivitet
    BufferedReader leser tekst fra tegninngangsstrømmen, buffrer hvert tegn, og gir effektiv lesing av tegn, matriser og linjer! (
    BufferedReader leser dataene til bufferområdet på forhånd, og skriver det deretter til harddisken Skanneren skriver data direkte til harddisken ) Raskere enn skanneren! Og du kan også stille inn størrelsen på bufferen, eller du kan bruke standardstørrelsen. I de fleste tilfeller er standardverdien stor nok.
    Ytelsessammenligningen er testet. Gjennomsnittlig tid for skanneren er omtrent ti ganger så lang som BufferedReader. Hvis det ikke er spesielle vanskeligheter, anbefales det sterkt å bruke BufferedReader for å lese data!

———————————————————————————————

Her er en spesiell forklaring på Scanners nextLine () -metode
[Kodedemonstrasjon]
bilde
【Driftsresultat】:
bilde

  • Generelle prosedyrer kan bruk av nextLine () -metoden forårsake et vognreturfenomen , (Observer de to bildene ovenfor)
    ==> I det kjørende resultatet, la den tredje tegnstrengen legges inn, men kjøringen er over før du skriver inn.

    Dette er fordi når du trykker på Enter-tasten etter å ha kommet inn i den andre strengverdenen, og neste () ikke kan lese vognreturen, bruker den vognretur som separator, så den overlates til den tredje strengen nextLine ().

    Den tredje tegnstrengen blir lagt inn av nextLine (), slik at metoden nextLine () benytter anledningen til å lese Enter-tasten direkte og avslutte programmet.
    (Som den tredje strengen er en tom streng)

  • Løs dette fenomenet : For å legge inn den tredje tegnstrengen normalt, må du legge til en setning av nextLine () før du skriver inn den tredje tegnstrengen for å lese vognreturen igjen av den neste neste ()