— Привіт, Аміго! Ти вже давно користуєшся класами 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 зустрінеться, метод склеїть символи в один рядок і поверне його.

— Я цим постійно користувався, тільки не знав, як усе це працює. Тепер знаю. Дякую, Кім.