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.inwInputStreamReader, a następnie wBufferedReader readLine()zwraca cały wiersz albonullna końcu danych wejściowych- Samodzielnie parsuj liczby za pomocą
Integer.parseIntisplit - 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
- Odczytywanie danych wejściowych za pomocą Scanner
- Odczytywanie liczb i wierszy
- Walidacja danych użytkownika
- Alternatywa dla BufferedReader