[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-i-o-nio-dlya-chego-ispolzuetsya-pushbackinputstream":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},662,"dlya-chego-ispolzuetsya-pushbackinputstream",15,"i-o-nio","I\u002FO & NIO","📁","Для чего используется PushbackInputStream?","`PushbackInputStream` — это обрабатывающий поток (обёртка над другим `InputStream`), который позволяет вернуть один или несколько прочитанных байтов обратно в поток через метод `unread()`.\n\n> Аналогия из жизни: представьте, что вы читаете текст и вам нужно «подсмотреть» следующее слово, чтобы решить, как обрабатывать текущее. PushbackInputStream позволяет прочитать слово, оценить его и «положить обратно», если оно нужно для следующего этапа обработки.\n\nЭто бывает необходимо при парсинге данных, когда для принятия решения о типе следующей конструкции нужно прочитать один или несколько байт вперёд (look-ahead). Если прочитанные байты относятся к следующей конструкции, их можно вернуть в поток.\n\n### Ключевые методы\n\n- `unread(int b)` — возвращает один байт в поток.\n- `unread(byte[] b)` — возвращает массив байт в поток.\n- `unread(byte[] b, int off, int len)` — возвращает часть массива в поток.\n\nКонструктор `PushbackInputStream(InputStream in, int size)` позволяет задать размер внутреннего буфера для возвращаемых байт. По умолчанию буфер равен одному байту.\n\n### Пример использования\n\n```java\ntry (PushbackInputStream pis = new PushbackInputStream(\n        new FileInputStream(\"data.bin\"), 2)) {\n    int firstByte = pis.read();\n    if (firstByte == 0xFF) {\n        int secondByte = pis.read();\n        if (secondByte != 0xFE) {\n            pis.unread(secondByte); \u002F\u002F вернуть, если это не BOM\n        }\n    }\n}\n```\n\n> **На собеседовании:** объясните назначение — look-ahead при парсинге. Упомяните метод `unread()` и то, что размер буфера для возврата настраивается через конструктор.","","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]