Класс PushbackInputStream
- java.lang.Object
-
- java.io.InputStream
-
- java.io.FilterInputStream
-
- java.io.PushbackInputStream
- Все реализованные интерфейсы:
-
Closeable,AutoCloseable
public class PushbackInputStream extends FilterInputStream
Класс PushbackInputStream добавляет функциональность к другому потоку ввода, а именно возможность "возврата назад" или "перечитывания" байтов, сохраняя возвращенные байты во внутреннем буфере. Это полезно в ситуациях, когда фрагменту кода удобно читать неопределённое количество байтов данных, ограниченных определённым значением байта; после чтения завершающего байта, фрагмент кода может "отменить" его возвращение, так что следующая операция чтения из потока ввода перечитает байт, который был возвращен. Например, байты, представляющие символы, составляющие идентификатор, могут быть завершены байтом, представляющим символ оператора; метод, чья задача — прочитать только идентификатор, может читать до тех пор, пока не увидит оператор, а затем вернуть оператор, чтобы его снова прочитать.
- С момента:
- 1.0
Поля
| Модификатор и тип | Поле | Описание |
|---|---|---|
protected byte[] | buf | Буфер возврата. |
protected int | pos | Позиция в буфере возврата, с которой будет читаться следующий байт. |
Поля, объявленные в классе java.io.FilterInputStream
in Конструкторы
| Конструктор | Описание |
|---|---|
PushbackInputStream(InputStream in) | Создает |
PushbackInputStream(InputStream in,
int size) | Создает |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
int | available() | Возвращает оценку количества байтов, которые могут быть прочитаны (или пропущены) из этого потока ввода без блокировки до следующего вызова метода для этого потока ввода. |
void | close() | Закрывает этот поток ввода и высвобождает любые системные ресурсы, связанные с потоком. |
void | mark(int readlimit) | Помечает текущую позицию в этом потоке ввода. |
boolean | markSupported() | Проверяет, поддерживает ли этот поток ввода методы |
int | read() | Читает следующий байт данных из этого потока ввода. |
int | read(byte[] b,
int off,
int len) | Читает до |
void | reset() | Перемещает этот поток в позицию на момент последнего вызова метода |
long | skip(long n) | Пропускает и отбрасывает |
void | unread(byte[] b) | Возвращает массив байтов, копируя его в начало буфера возврата. |
void | unread(byte[] b,
int off,
int len) | Возвращает часть массива байтов, копируя её в начало буфера возврата. |
void | unread(int b) | Возвращает байт, копируя его в начало буфера возврата. |
Методы, объявленные в классе java.io.FilterInputStream
read Методы, объявленные в классе java.io.InputStream
nullInputStream, readAllBytes, readNBytes, readNBytes, transferTo Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Поля
buf
protected byte[] buf
Буфер возврата.
- С момента:
- 1.1
pos
protected int pos
Позиция в буфере возврата, с которой будет читаться следующий байт. Когда буфер пуст, pos равно buf.length; когда буфер заполнен, pos равно нулю.
- С момента:
- 1.1
Конструкторы
PushbackInputStream
public PushbackInputStream(InputStream in,
int size) Создаёт PushbackInputStream с буфером возврата указанного size, и сохраняет свой аргумент, поток ввода in, для дальнейшего использования. Изначально буфер возврата пуст.
- Параметры:
-
in- поток ввода, из которого будут читаться байты. -
size- размер буфера возврата. - Исключения:
-
IllegalArgumentException- еслиsize <= 0 - С момента:
- 1.1
PushbackInputStream
public PushbackInputStream(InputStream in)
Создаёт PushbackInputStream с буфером возврата размером 1 байт и сохраняет свой аргумент, поток ввода in, для дальнейшего использования. Изначально буфер возврата пуст.
- Параметры:
-
in- поток ввода, из которого будут читаться байты.
Методы
read
public int read()
throws IOException Считывает следующий байт данных из этого потока ввода. Значение байта возвращается как целое число в диапазоне от 0 до 255. Если байт недоступен, потому что достигнут конец потока, возвращается значение -1. Этот метод блокируется до тех пор, пока данные ввода не станут доступными, не будет обнаружен конец потока или не будет выброшено исключение.
Этот метод возвращает последний помещённый назад байт, если такой есть, а в противном случае вызывает метод read своего базового потока ввода и возвращает значение, возвращённое этим методом.
- Overrides:
-
readв классеFilterInputStream - Возвращает:
- следующий байт данных или
-1, если достигнут конец потока. - Исключение:
-
IOException- если этот поток ввода был закрыт путём вызова его методаclose()или произошла ошибка ввода-вывода. - См. также:
InputStream.read()
read
public int read(byte[] b,
int off,
int len)
throws IOException Считывает до len байтов данных из этого потока ввода в массив байтов. Этот метод сначала считывает все помещённые назад байты; после этого, если было прочитано меньше, чем len байтов, он считывает из базового потока ввода. Если len не равно нулю, метод блокируется до тех пор, пока не станет доступным хотя бы 1 байт ввода; в противном случае байты не считываются, и возвращается 0.
- Overrides:
-
readв классеFilterInputStream - Параметры:
-
b- буфер, в который считываются данные. -
off- начальный смещение в целевом массивеb -
len- максимальное количество считываемых байтов. - Возвращает:
- общее количество байтов, считанных в буфер, или
-1, если больше нет данных, потому что достигнут конец потока. - Исключение:
-
NullPointerException- Еслиbравноnull. -
IndexOutOfBoundsException- Еслиoffотрицательное,lenотрицательное илиlenбольшеb.length - off. -
IOException- если этот поток ввода был закрыт вызовом его методаclose()или произошла ошибка ввода-вывода. - См. также:
InputStream.read(byte[], int, int)
unread
public void unread(int b)
throws IOException Возвращает байт путём его копирования в начало буфера обратной записи. После возвращения этого метода следующий считываемый байт будет иметь значение (byte)b.
- Параметры:
-
b- значениеint, низкоуровневый байт которого необходимо поместить назад. - Исключение:
-
IOException- если в буфере обратной записи нет достаточно места для байта или этот поток ввода был закрыт вызовом методаclose().
unread
public void unread(byte[] b,
int off,
int len)
throws IOException Возвращает часть массива байтов путём копирования её в начало буфера обратной записи. После возвращения этого метода, следующий байт для чтения будет иметь значение b[off], байт после него будет иметь значение b[off+1], и так далее.
- Параметры:
-
b- массив байтов для возврата. -
off- начальный смещение данных. -
len- количество байтов для возврата. - Исключение:
-
IOException- если в буфере обратной записи нет достаточно места для указанного количества байтов или этот поток ввода был закрыт вызовом методаclose(). - С:
- 1.1
unread
public void unread(byte[] b)
throws IOException Возвращает массив байтов путём его копирования в начало буфера обратной записи. После возвращения этого метода, следующий байт для чтения будет иметь значение b[0], байт после него будет иметь значение b[1], и так далее.
- Параметры:
-
b- массив байтов для возврата - Исключение:
-
IOException- если в буфере обратной записи нет достаточно места для указанного количества байтов, или этот поток ввода был закрыт вызовом методаclose(). - С:
- 1.1
available
public int available()
throws IOException Возвращает оценку количества байтов, которые можно прочитать (или пропустить) из этого потока ввода без блокировки до следующего вызова метода для этого потока ввода. Следующий вызов может быть тем же потоком или другим потоком. Одно чтение или пропуск такого количества байтов не заблокирует, но может прочитать или пропустить меньше байтов.
Метод возвращает сумму количества помещённых назад байтов и значения, возвращённого методом available.
- Overrides:
-
availableв классеFilterInputStream - Возвращает:
- количество байтов, которые можно прочитать (или пропустить) из потока ввода без блокировки.
- Исключение:
-
IOException- если этот поток ввода был закрыт вызовом методаclose()или произошла ошибка ввода-вывода. - См. также:
-
FilterInputStream.in,InputStream.available()
skip
public long skip(long n)
throws IOException Пропускает и отбрасывает n байтов данных из этого потока ввода. Метод skip может по разным причинам закончить пропусканием меньшего количества байтов, возможно, нуля. Если n отрицательное, байты не пропускаются.
Метод skip класса PushbackInputStream сначала пропускает байты в буфере обратной записи, если таковые имеются. Затем он вызывает метод skip базового потока ввода, если необходимо пропустить больше байтов. Возвращается фактическое количество пропущенных байтов.
- Overrides:
-
skipв классеFilterInputStream - Параметры:
-
n- количество байтов для пропуска. - Возвращает:
- фактическое количество пропущенных байтов.
- Исключение:
-
IOException- если поток был закрыт вызовом методаclose(),in.skip(n)выбросил исключение IOException или произошла ошибка ввода-вывода. - С:
- 1.2
- См. также:
-
FilterInputStream.in,InputStream.skip(long n)
markSupported
public boolean markSupported()
Проверяет, поддерживает ли этот поток ввода методы mark и reset, чего он не делает.
- Overrides:
-
markSupportedв классеFilterInputStream - Возвращает:
-
false, так как этот класс не поддерживает методыmarkиreset. - См. также:
-
InputStream.mark(int),InputStream.reset()
mark
public void mark(int readlimit)
Помечает текущую позицию в этом потоке ввода.
Метод mark класса PushbackInputStream ничего не делает.
- Overrides:
-
markв классеFilterInputStream - Параметры:
-
readlimit- максимальное ограничение байтов, которые можно прочитать, прежде чем позиция метки станет недействительной. - См. также:
InputStream.reset()
reset
public void reset()
throws IOException Перемещает этот поток в позицию, на которой метод mark был в последний раз вызван на этом потоке ввода.
Метод reset для класса PushbackInputStream ничего не делает, кроме как выбросить IOException.
- Overrides:
-
resetв классеFilterInputStream - Исключение:
-
IOException- если этот метод вызывается. - См. также:
-
InputStream.mark(int),IOException
close
public void close()
throws IOException Закрывает этот поток ввода и освобождает все системные ресурсы, связанные с потоком. После закрытия потока дальнейшие вызовы read(), unread(), available(), reset() или skip() будут выбрасывать исключение IOException. Закрытие уже закрытого потока не оказывает никакого влияния.
- Определено в:
-
closeв интерфейсеAutoCloseable - Определено в:
-
closeв интерфейсеCloseable - Overrides:
-
closeв классеFilterInputStream - Исключение:
-
IOException- если произошла ошибка ввода-вывода. - См. также:
FilterInputStream.in
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/PushbackInputStream.html