JavaRush/Курсы/Java Core/BufferedReader/InputStreamReader

BufferedReader/InputStreamReader

Открыта

— Привет, Амиго! Ты уже давно пользуешься классами BufferedReader и InputStreamReader. Теперь давай разберемся, что же они делают.

Класс InputStreamReader является классическим адаптером от интерфейса InputStream к интерфейсу Reader. Тут даже и добавить нечего.

Но вкратце, происходит вот что. Когда ты запрашиваешь (читаешь посредством read) у объекта типа InputStreamReader очередной символ, он читает из переданного ему в конструктор InputStream-а несколько байт и возвращает их как один char.

Но Reader – не самый удобный объект для работы. Нам часто нужно прочитать не все введенные пользователем символы за один раз, а разбить эти символы на строки.

— Но у класса Reader ведь есть метод read(CharBuffer s), разве мы не можем использовать его?

— Этот метод читает данные куском, размер которого равен размеру буфера и помещает их в объект CharBuffer.

Текст обычно делится на строки (линии, line — строка по-английски). Поэтому метод read(CharBuffer s) может прочитать несколько «линий» за один раз. Если же нам нужно прочитать текст именно до конца «линии» (т.е. все символы строки до enter), для этого лучше поискать что-нибудь еще. И такой метод есть. В классе BufferedReader.

Класс BufferedReader, являющийся удобной надстройкой над Reader, имеет один очень удобный метод: readLine(). Этот метод позволяет читать из Reader-а сразу целыми строками (т.е. линиями). Когда ты в своем коде вызываешь метод readLine, он читает из объекта Reader символы, пока не встретится enter. Как только enter встретится, метод склеит символы в одну строку и вернет ее.

— Я этим постоянно пользовался, только не знал как все это работает. Теперь знаю. Спасибо, Ким.

Комментарии (167)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Hipsta Krippo
Уровень 30
16 февраля, 12:22
зачем писать "Класс BufferedReader, являющийся удобной надстройкой над Reader", почему бы не внести в обиход уже пройденный паттерн Wrapper, и вместо "надстройкой" будет "оберткой"? таким образом все знания с предыдущих уроков наращиваются новыми знаниями из всех уроков последующих, создавая целостную картину
Anonymous #3585174
Уровень 33
10 сентября 2025, 10:05
Like
Артём Сёмкин
Уровень 47
13 января 2025, 03:49
17 марта 2025, 15:48
спасибо, Ким))
rockentrav
Уровень 34
26 декабря 2024, 21:46
{Java_Shark}
Уровень 36
11 декабря 2024, 12:05
++
17 марта 2025, 15:48
++Java_Shark
марин
Уровень 4
29 августа 2024, 10:03
у меня не открывается ссылка - белое поле
Long_byte
Уровень 59
23 марта 2024, 09:10
теперь я чуток понял эту строчку кода BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)) BufferedReader является оберткой для InputStreamReader а InputStreamReader является адаптером между InputStream и Reader то есть InputStream преобразует в Reader
Владислав
Уровень 11
Expert
22 марта 2024, 01:30
А где статья? Тут черные символы на черном фоне?
YUREC
Уровень 36
10 марта 2024, 08:20
"Ты уже давно пользуешься классами BufferedReader и InputStreamReader. Теперь давай разберемся, что же они делают." Как можно давно пользоваться и не понимать что они делают ?
kaidzualex
Уровень 5
Expert
11 июня 2024, 21:21
Ну вот так тут половина учащихся живет, судя по фидбэку в комментариях. Но авторы тонко юморят над собственным курсом. Просто половина учащихся разобралась посредством сторонних ресурсов что к чему, а другая половина так и не дошла до полного понимания вопроса. А сколько людей сломались на уровне с I/O в Syntax Pro...
SomeBody098веник в бане
25 июня 2024, 17:00
да да, верно подметил 😉
Максим Li Backend Developer
15 января 2024, 05:11
Good!