Hvorfor BufferedReader
Bufferede og ubufferede læsninger.
Hvorfor BufferedReader er en gratis Java Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Java Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Java Academy-kurset indeholder 4 lektioner i alt.
Læsning af inddata i Java
De fleste rigtige programmer har brug for inddata fra brugeren: et navn, et tal eller en kommando. Java har flere måder at læse inddata på, men en af de mest almindelige og effektive er BufferedReader.
I denne lektion lærer du, hvorfor BufferedReader findes, og hvornår det er det rette valg.
Hvor inddata kommer fra
Når du skriver i en konsol, strømmer teksten ind gennem System.in. Det er en lavniveau-byte-strøm — den giver dig rå bytes, ikke læsevenlig tekst.
For at omdanne disse bytes til læsbare tegn og hele linjer omslutter vi System.in med hjælperklasser. BufferedReader er den klasse, der gør dette nemt.
Hvad "Buffered" betyder
Det er langsomt at læse én byte ad gangen fra tastaturet eller en fil. En buffer er et stykke hukommelse, der indeholder mange tegn på én gang.
BufferedReader fylder denne buffer i store portioner og giver dig derefter data hurtigt. Færre ture til den underliggende strøm betyder bedre ydeevne, især ved store mængder inddata.
Opsætningen i to lag
BufferedReader kan ikke læse System.in direkte, fordi strømmen giver bytes. Først omslutter vi den med en InputStreamReader, som omdanner bytes til tegn.
System.in→ bytesInputStreamReader→ tegnBufferedReader→ linjer fra bufferen
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);Den klassiske enkeltlinje
Du vil se denne præcise linje i næsten alle Java-programmer, der læser konsolinddata. Den kæder begge omslutninger sammen i én sætning.
Husk: Den inderste InputStreamReader håndterer omdannelsen fra bytes til tegn, og den yderste BufferedReader tilføjer buffering samt den praktiske metode readLine().
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));Nødvendige importeringer
Disse klasser findes i pakken java.io, så du skal importere dem øverst i din fil.
Læsning af inddata kan mislykkes, så metoderne kaster IOException — det skal du også importere eller håndtere, hvilket vi gennemgår senere.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;BufferedReader sammenlignet med Scanner
Begyndere møder ofte Scanner først. Den er nemmere at bruge (den kan fortolke tal direkte), men langsommere.
- Scanner: nem talfortolkning, større overhead.
- BufferedReader: hurtigere, læser hele linjer, men du skal selv fortolke tallene.
Ved store mængder inddata eller konkurrenceprogrammering vinder BufferedReader på hastighed.
Læsning af en hel linje
Den vigtigste metode er readLine(). Den læser alt, hvad brugeren skriver, indtil vedkommende trykker på Enter, og returnerer det som en String (uden linjeskiftet).
Hvis der ikke er mere inddata, returnerer readLine() null. Det udforsker vi i den næste lektion.
String name = br.readLine();
System.out.println("Hello, " + name);Et komplet læseprogram
Her er et komplet program. Det læser én linje og hilser på brugeren. Bemærk throws IOException på main — en hurtig måde at lade fejl ved indlæsning boble op på, mens du lærer.
Dette kodestykke venter på tastaturinddata, så det kan ikke køres automatisk her, men det er gyldig Java.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String name = br.readLine();
System.out.println("Hi " + name);
}
}Ingen inddata nødvendig for at vise, at det virker
For at se, at omslutningerne findes og kan kompileres, får du her en kørbar version, der ikke læser noget — den bekræfter blot, at objektet er oprettet.
I et rigtigt program ville du kalde readLine(), men denne version udskriver en meddelelse, så du kan køre den med det samme.
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
System.out.println("BufferedReader is ready!");
}
}Hvornår du skal bruge BufferedReader
Vælg BufferedReader, når du:
- læser mange linjer eller store filer,
- går op i hastighed,
- ønsker enkel tekst linje for linje.
Brug i stedet Scanner, når du ønsker hurtig fortolkning af tal, og mængden af inddata er lille. Begge er gyldige — vælg det rigtige værktøj.
Hurtigt tjek
Test din forståelse af opsætningen med BufferedReader.
Opsummering
Du har lært, at System.in er en byte-strøm, der omsluttes af InputStreamReader (bytes til tegn) og derefter BufferedReader (bufferlagring samt readLine()).
Bufferlagring forbedrer ydeevnen, og BufferedReader er særligt velegnet til store eller linjebaserede mængder inddata. Næste emne: læsning af linjer i detaljer.
Lær Java med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 104
- Lektioner
- 374
Ofte stillede spørgsmål
Er lektionen “Hvorfor BufferedReader” gratis?
Ja — hele teksten til “Hvorfor BufferedReader” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Java Academy-kurset, skal du opgradere til CoddyKit PRO. Java Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Hvorfor BufferedReader”?
Bufferede og ubufferede læsninger. Du øver dig i Java Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Java Academy?
Der kræves ingen tidligere erfaring. Java Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Hvorfor BufferedReader”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Java Academy-lektion?
Ja. Alle Java Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Hvorfor BufferedReader
- Læsning af linjer
- Fortolkning af tal fra input
- Sikker lukning af streams