– Cześć, Amigo! Od dawna używasz klas BufferedReader i InputStreamReader. Sprawdźmy, co tak naprawdę one robią.

Klasa InputStreamReader to klasyczny adapter z interfejsu InputStream do interfejsu Reader. Nie ma tu też nic do dodania.

Ale w skrócie, oto co się dzieje. Kiedy prosisz o (odczytujesz) następny znak z obiektu InputStreamReader, odczytane zostaje kilka bajtów z InputStream przekazanego do konstruktora, co zwracane jest jako jeden znak.

Ale Reader nie jest najwygodniejszym obiektem do pracy. Często potrzebujemy nie odczytywania na raz wszystkich znaków wprowadzonych przez użytkownika, ale raczej podzielenia tych znaków na linie.

– Ale klasa Reader posiada metodę read(CharBuffer s). Czy nie możemy jej użyć?

– Ta metoda odczytuje dane w częściach o wielkości bufora i umieszcza je w obiekcie CharBuffer.

Tekst jest zazwyczaj podzielony na linie. Więc metoda read(CharBuffer s) może odczytać kilka linii na raz. Jeśli musimy odczytywać tekst dokładnie do końca linii (tzn. wszystkie znaki w linii aż do znaku nowej linii), lepiej byłoby poszukać czegoś innego. I istnieje alternatywna metoda. W klasie BufferedReader.

Klasa BufferedReader, która jest wygodną w użyciu strukturą zawartą w Reader, posiada jedną bardzo użyteczną metodę: readLine(). Metoda ta pozwala nam odczytywać całe linie tekstu na raz przy użyciu klasy Reader. Wywołując w kodzie readLine, odczytuje ona znaki z obiektu Reader do momentu napotkania znaku nowej linii. Po napotkaniu znaku nowej linii, metoda skleja te znaki w pojedynczy ciąg i zwraca go.

– Używałem tego regularnie, ale nie wiedziałem jak to działa. Teraz już to będę wiedział. Dzięki, Kim.