0Pricing
Java Academy · Lekcja

Dlaczego BufferedReader

Odczyt buforowany a niebuforowany

Dlaczego BufferedReader to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 1 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.

Odczytywanie danych wejściowych w Javie

Większość rzeczywistych programów potrzebuje danych wejściowych od użytkownika: imienia, liczby lub polecenia. Java udostępnia kilka sposobów odczytywania danych wejściowych, ale jednym z najczęściej używanych i wydajnych jest BufferedReader.

W tej lekcji dowiedzą się Państwo, dlaczego istnieje BufferedReader i kiedy warto go użyć.

Skąd pochodzą dane wejściowe

Gdy wpisują Państwo tekst w konsoli, przepływa on przez System.in. Jest to niskopoziomowy strumień bajtów — udostępnia surowe bajty, a nie wygodny w użyciu tekst.

Aby zamienić te bajty na czytelne znaki i całe wiersze, opakowujemy System.in w klasy pomocnicze. BufferedReader jest klasą opakowującą, która to ułatwia.

Co oznacza „Buffered”

Odczytywanie pojedynczego bajtu z klawiatury lub pliku jest powolne. Bufor to fragment pamięci, który przechowuje wiele znaków naraz.

BufferedReader zapełnia ten bufor dużymi porcjami, a następnie szybko przekazuje dane. Mniejsza liczba odwołań do bazowego strumienia oznacza lepszą wydajność, szczególnie w przypadku dużej ilości danych wejściowych.

Konfiguracja dwuwarstwowa

BufferedReader nie może bezpośrednio odczytywać danych z System.in, ponieważ ten strumień dostarcza bajty. Najpierw opakowujemy go w InputStreamReader, który konwertuje bajty na znaki.

  • System.in → bajty
  • InputStreamReader → znaki
  • BufferedReader → buforowane wiersze
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);

Klasyczny zapis w jednej linii

Dokładnie tę linię można znaleźć niemal w każdym programie Java, który odczytuje dane z konsoli. Łączy ona obie klasy opakowujące w jednym wyrażeniu.

Warto pamiętać: wewnętrzny InputStreamReader obsługuje konwersję bajtów na znaki, a zewnętrzny BufferedReader dodaje buforowanie oraz wygodną metodę readLine().

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

Wymagane importy

Te klasy znajdują się w pakiecie java.io, dlatego należy zaimportować je na początku pliku.

Odczytywanie danych wejściowych może się nie powieść, więc metody zgłaszają IOException — ten wyjątek również należy zaimportować lub obsłużyć, czym zajmiemy się później.

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

BufferedReader a Scanner

Początkujący często najpierw poznają Scanner. Jest on wygodniejszy (może bezpośrednio parsować liczby), ale wolniejszy.

  • Scanner: łatwe parsowanie, większy narzut.
  • BufferedReader: większa szybkość, odczyt całych wierszy, ale liczby trzeba parsować samodzielnie.

W przypadku dużej ilości danych wejściowych lub programowania konkursowego BufferedReader zapewnia większą szybkość.

Odczytywanie całego wiersza

Najważniejszą metodą jest readLine(). Odczytuje ona wszystko, co użytkownik wpisze do momentu naciśnięcia klawisza Enter, i zwraca to jako String (bez znaku nowej linii).

Jeśli nie ma więcej danych wejściowych, readLine() zwraca null. Zajmiemy się tym w następnej lekcji.

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

Kompletny program odczytujący dane

Oto kompletny program. Odczytuje jeden wiersz i wita użytkownika. Proszę zwrócić uwagę na throws IOException w metodzie main — podczas nauki jest to szybki sposób na przekazanie błędów wejścia wyżej.

Ten fragment czeka na dane wprowadzane z klawiatury, dlatego nie można go tutaj uruchomić automatycznie, ale jest poprawnym kodem 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);
    }
}

Do potwierdzenia działania nie są potrzebne dane wejściowe

Aby zobaczyć, że klasy opakowujące istnieją i można je skompilować, przedstawiamy działającą wersję, która niczego nie odczytuje — jedynie potwierdza utworzenie obiektu.

W rzeczywistej aplikacji wywołaliby Państwo readLine(), ale ta wersja wyświetla komunikat, dzięki czemu można ją uruchomić od razu.

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

Kiedy używać BufferedReader

Warto użyć BufferedReader, gdy:

  • odczytują Państwo wiele wierszy lub duże pliki,
  • zależy Państwu na szybkości,
  • potrzebują Państwo prostego odczytu tekstu wiersz po wierszu.

Proszę użyć Scanner, gdy potrzebne jest szybkie parsowanie liczb, a ilość danych wejściowych jest niewielka. Oba rozwiązania są poprawne — należy wybrać odpowiednie narzędzie.

Szybkie sprawdzenie

Sprawdźmy, czy rozumieją Państwo konfigurację BufferedReader.

Podsumowanie

Dowiedzieli się Państwo, że System.in jest strumieniem bajtów opakowanym najpierw przez InputStreamReader (bajty na znaki), a następnie przez BufferedReader (buforowanie oraz readLine()).

Buforowanie zwiększa wydajność, a BufferedReader sprawdza się szczególnie dobrze przy dużej ilości danych wejściowych lub danych podzielonych na wiersze. Następnie: szczegółowe omówienie odczytywania wierszy.

Często zadawane pytania

Czy lekcja „Dlaczego BufferedReader” jest bezpłatna?

Tak — pełny tekst „Dlaczego 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 „Dlaczego BufferedReader”?

Odczyt buforowany a niebuforowany Ć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 1 z 4.

Ile czasu zajmuje lekcja „Dlaczego 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. Dlaczego BufferedReader
  2. Odczytywanie wierszy
  3. Parsowanie liczb z danych wejściowych
  4. Bezpieczne zamykanie strumieni
← Powrót do Java Academy