Для чего используется PushbackInputStream?
PushbackInputStream — это обрабатывающий поток (обёртка над другим InputStream), который позволяет вернуть один или несколько прочитанных байтов обратно в поток через метод unread().
Аналогия из жизни: представьте, что вы читаете текст и вам нужно «подсмотреть» следующее слово, чтобы решить, как обрабатывать текущее. PushbackInputStream позволяет прочитать слово, оценить его и «положить обратно», если оно нужно для следующего этапа обработки.
Это бывает необходимо при парсинге данных, когда для принятия решения о типе следующей конструкции нужно прочитать один или несколько байт вперёд (look-ahead). Если прочитанные байты относятся к следующей конструкции, их можно вернуть в поток.
Ключевые методы
unread(int b)— возвращает один байт в поток.unread(byte[] b)— возвращает массив байт в поток.unread(byte[] b, int off, int len)— возвращает часть массива в поток.
Конструктор PushbackInputStream(InputStream in, int size) позволяет задать размер внутреннего буфера для возвращаемых байт. По умолчанию буфер равен одному байту.
Пример использования
Пример
try (PushbackInputStream pis = new PushbackInputStream(
new FileInputStream("data.bin"), 2)) {
int firstByte = pis.read();
if (firstByte == 0xFF) {
int secondByte = pis.read();
if (secondByte != 0xFE) {
pis.unread(secondByte); // вернуть, если это не BOM
}
}
}
На собеседовании: объясните назначение — look-ahead при парсинге. Упомяните метод
unread()и то, что размер буфера для возврата настраивается через конструктор.