[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-i-o-nio-dlya-chego-ispolzuetsya-sequenceinputstream":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},663,"dlya-chego-ispolzuetsya-sequenceinputstream",15,"i-o-nio","I\u002FO & NIO","📁","Для чего используется SequenceInputStream?","`SequenceInputStream` — это обёртка, которая объединяет (сливает) несколько потоков `InputStream` в один последовательный поток, позволяя читать их как единый непрерывный источник данных.\n\n> Аналогия из жизни: представьте несколько томов одной книги. `SequenceInputStream` позволяет читать их как одну книгу — когда заканчивается один том, чтение плавно переходит к следующему.\n\n### Конструкторы\n\n- `SequenceInputStream(InputStream s1, InputStream s2)` — объединяет два потока.\n- `SequenceInputStream(Enumeration\u003C? extends InputStream> e)` — объединяет произвольное количество потоков через `Enumeration`.\n\nВо время работы класс выполняет запросы на чтение из первого потока до его завершения, затем автоматически переключается на второй и так далее. По достижении конца каждый поток автоматически закрывается. Закрытие `SequenceInputStream` приводит к закрытию всех ещё открытых потоков.\n\n### Пример: объединение трёх файлов\n\n```java\nList\u003CInputStream> streams = List.of(\n    new FileInputStream(\"part1.txt\"),\n    new FileInputStream(\"part2.txt\"),\n    new FileInputStream(\"part3.txt\")\n);\nEnumeration\u003CInputStream> enumeration = Collections.enumeration(streams);\n\ntry (SequenceInputStream sis = new SequenceInputStream(enumeration)) {\n    sis.transferTo(new FileOutputStream(\"combined.txt\")); \u002F\u002F Java 9+\n}\n```\n\nНа практике `SequenceInputStream` используется при объединении фрагментированных файлов, слиянии логов из нескольких источников или склейке частей ответа от нескольких сервисов.\n\n> **На собеседовании:** покажите, что знаете конструкторы (пара потоков или Enumeration), принцип последовательного чтения и автоматическое закрытие потоков.","","middle",[15,16,17],"core","inputstream","io",[],null,{"title":21,"description":22,"ogTitle":23,"ogDescription":24,"keywords":25,"schemaAnswer":34,"featuredSnippetReady":35},"PushbackInputStream в Java — Gymterview","PushbackInputStream: возврат прочитанных байт в поток через unread(). Look-ahead при парсинге, размер буфера, пример использования.","PushbackInputStream — возврат байт в поток — Gymterview","Как PushbackInputStream позволяет «заглянуть» вперёд в потоке и вернуть прочитанные байты через unread().",[26,27,28,29,30,31,32,33],"PushbackInputStream","unread","look-ahead","парсинг","Java IO","InputStream","буфер","собеседование","PushbackInputStream — обёртка над InputStream, позволяющая вернуть прочитанные байты обратно в поток через метод unread(). Используется для look-ahead при парсинге, когда нужно прочитать байты вперёд для принятия решения, а затем вернуть их. Размер буфера для возврата настраивается в конструкторе (по умолчанию — 1 байт).",true]