Sobes.tech
Назад к вопросам
Middle
7

Что за паттерн реализован в цепочке FileInputStream → BufferedInputStream → InputStreamReader → BufferedReader?

Компании, где спрашивали
экзон

Ответ от нейросети

sobes.tech AI

В цепочке FileInputStream → BufferedInputStream → InputStreamReader → BufferedReader реализован паттерн "Декоратор" (Decorator). Этот паттерн позволяет динамически добавлять объектам новые обязанности, оборачивая их в другие объекты-обертки.

Здесь каждый класс расширяет функциональность предыдущего:

  • FileInputStream — базовый поток для чтения байтов из файла.
  • BufferedInputStream — добавляет буферизацию для повышения производительности чтения байтов.
  • InputStreamReader — преобразует байтовый поток в символьный поток, используя кодировку.
  • BufferedReader — добавляет буферизацию для эффективного чтения символов, строк.

Таким образом, каждый следующий поток оборачивает предыдущий, добавляя новые возможности, не меняя интерфейс. Это позволяет гибко комбинировать функциональность потоков ввода.

Пример:

FileInputStream fis = new FileInputStream("file.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
InputStreamReader isr = new InputStreamReader(bis, "UTF-8");
BufferedReader br = new BufferedReader(isr);

String line = br.readLine();

Здесь BufferedReader позволяет читать строки, а BufferedInputStream улучшает производительность чтения байтов из файла.