0Pricing
Java Academy · Lekcja

Alternatywa dla BufferedReader

Szybszy odczyt z konsoli

Alternatywa dla BufferedReader to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 4 lekcji w sumie.

Szybszy sposób odczytu

Scanner jest wygodny, ale stosunkowo wolny w przypadku dużych danych wejściowych. Do odczytu dużych ilości danych używaj BufferedReader z java.io, który jest znacznie szybszy, ponieważ jednocześnie odczytuje duże fragmenty danych.

Tworzenie BufferedReader

Umieść InputStreamReader opakowujący System.in wewnątrz BufferedReader. W tym miejscu używamy StringReader, aby przykłady działały bez wpisywania danych.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("Hello"));
        System.out.println(reader.readLine());
        reader.close();
    }
}

readLine zwraca String

readLine() odczytuje cały wiersz jako String, bez terminatora wiersza. W przeciwieństwie do Scanner zawsze zwraca tekst, więc liczby trzeba parsować samodzielnie.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("first\nsecond"));
        System.out.println(reader.readLine());
        System.out.println(reader.readLine());
        reader.close();
    }
}

Koniec danych wejściowych to null

Gdy nie ma już więcej danych wejściowych, readLine() zwraca null. Jest to sygnał, aby zakończyć odczyt.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("one line"));
        System.out.println(reader.readLine());
        System.out.println(reader.readLine());
        reader.close();
    }
}

Odczytywanie wszystkich wierszy

Wykonuj pętlę, dopóki readLine() nie zwróci null, aby przetworzyć każdy wiersz danych wejściowych.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("a\nb\nc"));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println("> " + line);
        }
        reader.close();
    }
}

Samodzielne parsowanie liczb

Ponieważ readLine zwraca tekst, przekształć go za pomocą Integer.parseInt, gdy potrzebujesz liczby.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("42"));
        int n = Integer.parseInt(reader.readLine().trim());
        System.out.println(n * 2);
        reader.close();
    }
}

Dzielenie wiersza na tokeny

Aby odczytać kilka liczb z jednego wiersza, podziel go za pomocą split i sparsuj każdy fragment.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new StringReader("10 20 30"));
        String[] parts = reader.readLine().split(" ");
        int sum = 0;
        for (String p : parts) {
            sum += Integer.parseInt(p);
        }
        System.out.println(sum);
        reader.close();
    }
}

Wyjątki kontrolowane

readLine deklaruje kontrolowany wyjątek IOException, więc musisz zadeklarować throws IOException albo umieścić wywołanie w bloku try-catch. Scanner tego nie wymaga.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try {
            BufferedReader reader = new BufferedReader(new StringReader("data"));
            System.out.println(reader.readLine());
            reader.close();
        } catch (IOException e) {
            System.out.println("Read error");
        }
    }
}

try-with-resources

Używaj try-with-resources, aby czytnik zamykał się automatycznie, nawet jeśli wystąpi wyjątek.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        try (BufferedReader reader = new BufferedReader(new StringReader("auto-closed"))) {
            System.out.println(reader.readLine());
        }
    }
}

Przykład z użyciem System.in

W przypadku rzeczywistego odczytu z klawiatury opakuj System.in. Uruchom ten przykład lokalnie, wpisz wiersz, a następnie naciśnij Enter.

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter text: ");
        String input = reader.readLine();
        System.out.println("You typed: " + input);
    }
}

Scanner czy BufferedReader

Wybierz Scanner, jeśli zależy Ci na wygodzie i łatwym parsowaniu liczb. Wybierz BufferedReader, jeśli potrzebujesz szybkości przy dużych danych wejściowych i akceptujesz samodzielne parsowanie oraz obsługę IOException.

Szybki test

Sprawdź swoją wiedzę na temat BufferedReader.

Podsumowanie

Poznałeś alternatywę dla Scanner, czyli BufferedReader:

  • Umieść System.in w InputStreamReader, a następnie w BufferedReader
  • readLine() zwraca cały wiersz albo null na końcu danych wejściowych
  • Samodzielnie parsuj liczby za pomocą Integer.parseInt i split
  • Metoda zgłasza kontrolowany wyjątek IOException, więc należy go obsłużyć albo zadeklarować
  • Wybieraj tę klasę zamiast Scanner w przypadku dużych danych wejściowych, gdy wydajność ma kluczowe znaczenie

Często zadawane pytania

Czy lekcja „Alternatywa dla BufferedReader” jest bezpłatna?

Tak — pełny tekst „Alternatywa dla BufferedReader” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Alternatywa dla BufferedReader”?

Szybszy odczyt z konsoli Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Java Academy?

Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Alternatywa dla BufferedReader”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?

Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Odczytywanie danych wejściowych za pomocą Scanner
  2. Odczytywanie liczb i wierszy
  3. Walidacja danych użytkownika
  4. Alternatywa dla BufferedReader
← Powrót do Java Academy