Gymterview
middle

Для чего используется SequenceInputStream?

SequenceInputStream — это обёртка, которая объединяет (сливает) несколько потоков InputStream в один последовательный поток, позволяя читать их как единый непрерывный источник данных.

Аналогия из жизни: представьте несколько томов одной книги. SequenceInputStream позволяет читать их как одну книгу — когда заканчивается один том, чтение плавно переходит к следующему.

Конструкторы

  • SequenceInputStream(InputStream s1, InputStream s2) — объединяет два потока.
  • SequenceInputStream(Enumeration<? extends InputStream> e) — объединяет произвольное количество потоков через Enumeration.

Во время работы класс выполняет запросы на чтение из первого потока до его завершения, затем автоматически переключается на второй и так далее. По достижении конца каждый поток автоматически закрывается. Закрытие SequenceInputStream приводит к закрытию всех ещё открытых потоков.

Пример: объединение трёх файлов

Пример
List<InputStream> streams = List.of(
    new FileInputStream("part1.txt"),
    new FileInputStream("part2.txt"),
    new FileInputStream("part3.txt")
);
Enumeration<InputStream> enumeration = Collections.enumeration(streams);

try (SequenceInputStream sis = new SequenceInputStream(enumeration)) {
    sis.transferTo(new FileOutputStream("combined.txt")); // Java 9+
}

На практике SequenceInputStream используется при объединении фрагментированных файлов, слиянии логов из нескольких источников или склейке частей ответа от нескольких сервисов.

На собеседовании: покажите, что знаете конструкторы (пара потоков или Enumeration), принцип последовательного чтения и автоматическое закрытие потоков.