Java Academy · Lektion

Varför BufferedReader

Buffrade och obuffrade läsningar

Lektion 1 av 413 steg

Varför BufferedReader är en gratis lektion i Java Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Java Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Java Academy innehåller totalt 4 lektioner.

Läsa indata i Java

De flesta verkliga program behöver indata från användaren: ett namn, ett tal eller ett kommando. Java har flera sätt att läsa indata, men ett av de vanligaste och effektivaste är BufferedReader.

I den här lektionen får du lära dig varför BufferedReader finns och när du bör använda den.

Var indata kommer ifrån

När du skriver i en konsol kommer texten in via System.in. Det här är en lågnivåmässig byteström — den ger dig råa byte, inte lättläst text.

För att omvandla dessa byte till läsbara tecken och hela rader omsluter vi System.in med hjälparklasser. BufferedReader är omslutningen som gör detta enkelt.

Vad "Buffered" betyder

Det går långsamt att läsa ett byte i taget från tangentbordet eller en fil. En buffert är ett minnesblock som innehåller många tecken samtidigt.

BufferedReader fyller bufferten i stora block och lämnar sedan över data snabbt. Färre åtkomster till den underliggande strömmen ger bättre prestanda, särskilt vid stora mängder indata.

Konfigurationen med två lager

BufferedReader kan inte läsa System.in direkt, eftersom den strömmen ger byte. Först omsluter vi den med en InputStreamReader, som omvandlar byte till tecken.

  • System.in → byte
  • InputStreamReader → tecken
  • BufferedReader → buffrade rader
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

Den klassiska enradsinstruktionen

Du kommer att se exakt den här raden i nästan alla Java-program som läser indata från konsolen. Den kopplar ihop båda omslutningarna i en enda instruktion.

Kom ihåg: den inre InputStreamReader hanterar omvandlingen från byte till tecken, medan den yttre BufferedReader lägger till buffring och den praktiska metoden readLine().

BufferedReader br =
    new BufferedReader(new InputStreamReader(System.in));

Nödvändiga importer

De här klasserna finns i paketet java.io, så du måste importera dem högst upp i filen.

Det kan uppstå fel när indata läses, så metoderna kastar IOException — du måste också importera eller hantera det. Det går vi igenom senare.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

BufferedReader jämfört med Scanner

Nybörjare kommer ofta först i kontakt med Scanner. Den är enklare att använda (den kan tolka tal direkt), men långsammare.

  • Scanner: enkel tolkning, större overhead.
  • BufferedReader: snabbare och läser hela rader, men du måste själv tolka talen.

Vid stora mängder indata eller tävlingsprogrammering är BufferedReader snabbare.

Läsa en hel rad

Den viktigaste metoden är readLine(). Den läser allt användaren skriver tills Enter trycks ned och returnerar det som en String (utan radbrytningen).

Om det inte finns mer indata returnerar readLine() null. Det utforskar vi i nästa lektion.

String name = br.readLine();
System.out.println("Hello, " + name);

Ett komplett läsprogram

Här är ett komplett program. Det läser en rad och hälsar på användaren. Lägg märke till throws IOException på main — ett snabbt sätt att låta indatafel bubbla upp medan du lär dig.

Det här kodexemplet väntar på indata från tangentbordet, så det kan inte köras automatiskt här, men det är giltig Java-kod.

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 indata behövs för att visa att det fungerar

För att se att omslutningarna finns och kan kompileras får du här en körbar version som inte läser något — den bekräftar bara att objektet skapas.

I en verklig app skulle du anropa readLine(), men den här versionen skriver ut ett meddelande så att du kan köra den direkt.

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!");
    }
}

När BufferedReader bör användas

Använd BufferedReader när du:

  • läser många rader eller stora filer,
  • prioriterar hastighet,
  • vill ha enkel text rad för rad.

Använd i stället Scanner när du vill tolka tal snabbt och indata är liten. Båda är giltiga alternativ — välj rätt verktyg.

Snabbkontroll

Testa dina kunskaper om konfigurationen av BufferedReader.

Sammanfattning

Du har lärt dig att System.in är en byteström som omsluts av InputStreamReader (byte till tecken) och sedan av BufferedReader (buffring samt readLine()).

Buffring förbättrar prestandan, och BufferedReader passar utmärkt för stora eller radbaserade indata. Nästa steg är att läsa rader mer ingående.

Gratis att börja

Lär dig Java med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
104
Lektioner
374

Vanliga frågor

Är lektionen ”Varför BufferedReader” gratis?

Ja – hela texten till ”Varför BufferedReader” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Java Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Java Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Varför BufferedReader”?

Buffrade och obuffrade läsningar Ni övar på Java Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Java Academy?

Du behöver inga förkunskaper. Utbildningen i Java Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”Varför BufferedReader”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Java Academy-lektionen?

Ja. Varje Java Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Varför BufferedReader
  2. Läsa rader
  3. Tolka tal från indata
  4. Stänga strömmar säkert
← Tillbaka till Java Academy