Класс InputStream
- Все реализуемые интерфейсы:
Closeable, AutoCloseable
- Прямые известные подклассы:
AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream
public abstract class InputStream extends Object implements Closeable
Приложения, которым необходимо определить подкласс InputStream, должны всегда предоставлять метод, возвращающий следующий байт входных данных.
- Начиная с версии:
- 1.0
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
InputStream() |
Конструктор для вызова из подклассов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
int |
available() |
Возвращает оценку количества байтов, которые можно прочитать (или пропустить) из этого входного потока без блокировки; это значение может быть равно 0, в том числе при обнаружении конца потока. |
void |
close() |
Закрывает этот входной поток и освобождает все системные ресурсы, связанные с ним. |
void |
mark |
Отмечает текущую позицию в этом входном потоке. |
boolean |
markSupported() |
Проверяет, поддерживает ли этот входной поток методы mark и reset. |
static InputStream |
nullInputStream() |
Возвращает новый InputStream, который не читает байты. |
abstract int |
read() |
Читает следующий байт данных из входного потока. |
int |
read |
Читает некоторое количество байтов из входного потока и сохраняет их в массиве буфера b. |
int |
read |
Читает до len байтов данных из входного потока в массив байтов. |
byte[] |
readAllBytes() |
Читает все оставшиеся байты из входного потока. |
int |
readNBytes |
Читает запрошенное количество байтов из входного потока в указанный массив байтов. |
byte[] |
readNBytes |
Читает из входного потока до указанного количества байтов. |
void |
reset() |
Перемещает этот поток в позицию, соответствующую моменту последнего вызова метода mark для этого входного потока. |
long |
skip |
Пропускает и отбрасывает n байтов данных из этого входного потока. |
void |
skipNBytes |
Пропускает и отбрасывает ровно n байтов данных из этого входного потока. |
long |
transferTo |
Читает все байты из этого входного потока и записывает их в указанный выходной поток в порядке чтения. |
Подробное описание конструкторов
InputStream
public InputStream()
Подробное описание методов
nullInputStream
public static InputStream nullInputStream()
InputStream, который не считывает байты. Возвращённый поток изначально открыт. Поток закрывается вызовом метода close(). Последующие вызовы close() не оказывают никакого эффекта. Пока поток открыт, методы available(), read(), read(byte[]), read(byte[], int, int), readAllBytes(), readNBytes(byte[], int, int), readNBytes(int), skip(long), skipNBytes(long) и transferTo() ведут себя так, как если бы был достигнут конец потока. После закрытия потока все эти методы выбрасывают IOException.
Метод markSupported() возвращает false. Метод mark() ничего не делает, а метод reset() выбрасывает IOException.
- Возвращает:
InputStream, не содержащий байтов- Начиная с версии:
- 11
read
public abstract int read() throws IOException
int в диапазоне от 0 до 255. Если байт недоступен, поскольку достигнут конец потока, возвращается значение -1. Этот метод блокирует выполнение до тех пор, пока не станут доступны входные данные, не будет обнаружен конец потока или не будет выброшено исключение.- Возвращает:
- следующий байт данных или
-1, если достигнут конец потока. - Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода.
read
public int read(byte[] b) throws IOException
b. Фактически считанное количество байтов возвращается в виде целого числа. Этот метод блокирует выполнение до тех пор, пока не станут доступны входные данные, не будет обнаружен конец файла или не будет выброшено исключение. Если длина b равна нулю, байты не считываются и возвращается 0; в противном случае предпринимается попытка считать хотя бы один байт. Если байт недоступен, поскольку поток достиг конца файла, возвращается значение -1; в противном случае считывается хотя бы один байт и сохраняется в b.
Первый считанный байт сохраняется в элементе b[0], следующий — в b[1] и так далее. Количество считанных байтов не превышает длину b. Пусть k — фактически считанное количество байтов; эти байты будут сохранены в элементах от b[0] до b[k-1], а элементы от b[k] до b[b.length-1] останутся без изменений.
- Требования к реализации:
- Метод
read(b)классаInputStreamдействует так же, как:read(b, 0, b.length) - Параметры:
-
b— буфер, в который считываются данные. - Возвращает:
- общее количество байтов, считанных в буфер, или
-1, если данных больше нет, поскольку достигнут конец потока. - Выбрасывает:
-
IOException— если первый байт не удаётся считать по какой-либо причине, отличной от достижения конца файла, если входной поток закрыт или если произошла другая ошибка ввода-вывода. -
NullPointerException— еслиbравноnull. - См. также:
read
public int read(byte[] b, int off, int len) throws IOException
len байтов данных из входного потока в массив байтов. Предпринимается попытка считать до len байтов, однако фактически может быть считано меньшее количество. Фактически считанное количество байтов возвращается в виде целого числа. Этот метод блокирует выполнение до тех пор, пока не станут доступны входные данные, не будет обнаружен конец файла или не будет выброшено исключение.
Если len равно нулю, байты не считываются и возвращается 0; в противном случае предпринимается попытка считать хотя бы один байт. Если байт недоступен, поскольку поток достиг конца файла, возвращается значение -1; в противном случае считывается хотя бы один байт и сохраняется в b.
Первый считанный байт сохраняется в элементе b[off], следующий — в b[off+1] и так далее. Количество считанных байтов не превышает len. Пусть k — фактически считанное количество байтов; эти байты будут сохранены в элементах от b[off] до b[off+k-1], а элементы от b[off+k] до b[off+len-1] останутся без изменений.
В любом случае элементы от b[0] до b[off-1] и элементы от b[off+len] до b[b.length-1] остаются без изменений.
- Требования к реализации:
- Реализация метода
read(b, off, len)классаInputStreamпросто вызывает методread()повторно. Если первый такой вызов приводит кIOException, это исключение возвращается из вызова методаread(b,off,len). Если любой последующий вызовread()приводит кIOException, исключение перехватывается и обрабатывается так, как если бы был достигнут конец файла; считанные к этому моменту байты сохраняются вb, а возвращается количество байтов, считанных до возникновения исключения. Реализация этого метода по умолчанию блокирует выполнение до тех пор, пока не будет считано запрошенное количество входных данныхlen, не будет обнаружен конец файла или не будет выброшено исключение. Подклассам рекомендуется предоставлять более эффективную реализацию этого метода. - Параметры:
-
b— буфер, в который считываются данные. -
off— начальное смещение в массивеb, с которого записываются данные. -
len— максимальное количество байтов для считывания. - Возвращает:
- общее количество байтов, считанных в буфер, или
-1, если данных больше нет, поскольку достигнут конец потока. - Выбрасывает:
-
IOException— если первый байт не удаётся считать по какой-либо причине, отличной от достижения конца файла, если входной поток закрыт или если произошла другая ошибка ввода-вывода. -
NullPointerException— еслиbравноnull. -
IndexOutOfBoundsException— еслиoffотрицательно,lenотрицательно илиlenбольшеb.length - off - См. также:
readAllBytes
public byte[] readAllBytes() throws IOException
Когда этот поток достигает конца, дальнейшие вызовы этого метода возвращают пустой массив байтов.
Обратите внимание, что этот метод предназначен для простых случаев, когда удобно считать все байты в массив байтов. Он не предназначен для считывания больших объёмов данных из входных потоков.
Поведение в случае асинхронного закрытия входного потока или прерывания потока выполнения во время считывания в значительной степени зависит от конкретного входного потока и поэтому не определено.
Если при считывании из входного потока возникает ошибка ввода-вывода, она может произойти после считывания части, но не всех байтов. Следовательно, входной поток может не достичь конца и может оказаться в несогласованном состоянии. Настоятельно рекомендуется незамедлительно закрыть поток при возникновении ошибки ввода-вывода.
- Требования к реализации:
- Этот метод вызывает
readNBytes(int)с длинойInteger.MAX_VALUE. - Возвращает:
- массив байтов, содержащий байты, считанные из этого входного потока
- Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода -
OutOfMemoryError— если не удаётся выделить массив требуемого размера. - Начиная с версии:
- 9
readNBytes
public byte[] readNBytes(int len) throws IOException
Длина возвращённого массива равна количеству байтов, считанных из потока. Если len равно нулю, байты не считываются и возвращается пустой массив байтов. В противном случае из потока считывается до len байтов. Если достигнут конец потока, может быть считано меньше len байтов.
Когда этот поток достигает конца, дальнейшие вызовы этого метода возвращают пустой массив байтов.
Обратите внимание, что этот метод предназначен для простых случаев, когда удобно считать указанное количество байтов в массив байтов. Общий объём памяти, выделяемой этим методом, пропорционален количеству байтов, считанных из потока, и ограничен значением len. Поэтому метод можно безопасно вызывать с очень большими значениями len при наличии достаточного объёма памяти.
Поведение в случае асинхронного закрытия входного потока или прерывания потока выполнения во время считывания в значительной степени зависит от конкретного входного потока и поэтому не определено.
Если при считывании из входного потока возникает ошибка ввода-вывода, она может произойти после считывания части, но не всех байтов. Следовательно, входной поток может не достичь конца и может оказаться в несогласованном состоянии. Настоятельно рекомендуется незамедлительно закрыть поток при возникновении ошибки ввода-вывода.
- Примечание по реализации:
- Количество байтов, выделяемых для считывания данных из этого потока и возврата результата, ограничено значением
2*(long)lenвключительно. - Параметры:
-
len— максимальное количество байтов для считывания - Возвращает:
- массив байтов, содержащий байты, считанные из этого входного потока
- Выбрасывает:
-
IllegalArgumentException— еслиlengthотрицательно -
IOException— если произошла ошибка ввода-вывода -
OutOfMemoryError— если не удаётся выделить массив требуемого размера. - Начиная с версии:
- 11
readNBytes
public int readNBytes(byte[] b, int off, int len) throws IOException
len байтов входных данных, не будет обнаружен конец потока или не будет выброшено исключение. Возвращается фактически считанное количество байтов, которое может быть равно нулю. Этот метод не закрывает входной поток. Если конец потока достигнут до считывания len байтов, возвращается фактически считанное количество байтов. Когда этот поток достигает конца, дальнейшие вызовы этого метода возвращают ноль.
Если len равно нулю, байты не считываются и возвращается 0; в противном случае предпринимается попытка считать до len байтов.
Первый считанный байт сохраняется в элементе b[off], следующий — в b[off+1] и так далее. Количество считанных байтов не превышает len. Пусть k — фактически считанное количество байтов; эти байты будут сохранены в элементах от b[off] до b[off+k-1], а элементы от b[off+k ] до b[off+len-1] останутся без изменений.
Поведение в случае асинхронного закрытия входного потока или прерывания потока выполнения во время считывания в значительной степени зависит от конкретного входного потока и поэтому не определено.
Если при считывании из входного потока возникает ошибка ввода-вывода, она может произойти после обновления данными из входного потока некоторых, но не всех байтов b. Следовательно, входной поток и b могут оказаться в несогласованном состоянии. Настоятельно рекомендуется незамедлительно закрыть поток при возникновении ошибки ввода-вывода.
- Параметры:
-
b— массив байтов, в который считываются данные -
off— начальное смещение вb, с которого записываются данные -
len— максимальное количество байтов для считывания - Возвращает:
- фактическое количество байтов, считанных в буфер
- Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода -
NullPointerException— еслиbравноnull -
IndexOutOfBoundsException— еслиoffотрицательно,lenотрицательно илиlenбольшеb.length - off - Начиная с версии:
- 9
skip
public long skip(long n) throws IOException
n байтов данных из этого входного потока. По разным причинам метод skip может пропустить меньшее количество байтов, возможно, 0. Это может быть вызвано различными условиями; достижение конца файла до пропуска n байтов — лишь одна из возможных причин. Возвращается фактическое количество пропущенных байтов. Если n отрицательно, метод skip класса InputStream всегда возвращает 0, и байты не пропускаются. Подклассы могут обрабатывать отрицательное значение иначе.- Требования к реализации:
- Реализация метода
skipэтого класса создаёт массив байтов, а затем неоднократно считывает в него данные, пока не будут считаныnбайтов или не будет достигнут конец потока. Подклассам рекомендуется предоставлять более эффективную реализацию этого метода. Например, реализация может использовать возможность перемещения по потоку. - Параметры:
-
n— количество байтов для пропуска. - Возвращает:
- фактическое количество пропущенных байтов, которое может быть равно нулю.
- Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода. - См. также:
skipNBytes
public void skipNBytes(long n) throws IOException
n байтов данных из этого входного потока. Если n равно нулю, байты не пропускаются. Если n отрицательно, байты не пропускаются. Подклассы могут обрабатывать отрицательное значение иначе. Этот метод блокирует выполнение до тех пор, пока не будет пропущено запрошенное количество байтов, не будет достигнут конец файла или не будет выброшено исключение.
Если конец потока достигнут до перехода потока в требуемую позицию, выбрасывается EOFException.
Если возникает ошибка ввода-вывода, входной поток может оказаться в несогласованном состоянии. Настоятельно рекомендуется незамедлительно закрыть поток при возникновении ошибки ввода-вывода.
- Требования к реализации:
- Если
nравно нулю или отрицательно, байты не пропускаются. Еслиnположительно, реализация этого метода по умолчанию неоднократно вызываетskip(), передавая в качестве параметра оставшееся количество байтов для пропуска, пока не будет пропущено запрошенное количество байтов или не возникнет ошибка. Если в какой-либо момент возвращаемое значениеskip()отрицательно или превышает оставшееся количество байтов для пропуска, выбрасываетсяIOException. Еслиskip()когда-либо возвращает ноль, вызываетсяread()для считывания одного байта, и если он возвращает-1, выбрасываетсяEOFException. Любое исключение, выброшенноеskip()илиread(), будет передано вызывающему коду. - Примечание по реализации:
- Подклассам рекомендуется предоставлять более эффективную реализацию этого метода.
- Параметры:
-
n— количество байтов для пропуска. - Выбрасывает:
-
EOFException— если достигнут конец потока до того, как поток удастся переместить наnбайтов вперёд относительно позиции на момент вызова этого метода. -
IOException— если поток не удаётся переместить в требуемую позицию или если произошла ошибка ввода-вывода. - Начиная с версии:
- 12
- См. также:
available
public int available() throws IOException
Обратите внимание, что хотя некоторые реализации InputStream возвращают общее количество байтов в потоке, многие этого не делают. Использовать возвращаемое этим методом значение для выделения буфера, предназначенного для хранения всех данных в этом потоке, никогда не следует.
Реализация этого метода в подклассе может выбросить IOException, если этот входной поток был закрыт вызовом метода close().
- Примечание к API:
- Этот метод следует переопределять в подклассах.
- Требования к реализации:
- Метод
availableклассаInputStreamвсегда возвращает0. - Возвращает:
- оценку количества байтов, которые можно считать из этого входного потока (или пропустить в нём) без блокировки, либо
0при достижении конца входного потока. - Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода.
close
public void close() throws IOException
- Определено в:
-
closeв интерфейсеAutoCloseable - Определено в:
-
closeв интерфейсеCloseable - Требования к реализации:
- Метод
closeклассаInputStreamничего не делает. - Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода.
mark
public void mark(int readlimit)
reset перемещает этот поток в последнюю отмеченную позицию, чтобы последующие операции считывания повторно прочитали те же байты. Аргумент readlimit указывает этому входному потоку, сколько байтов можно считать до того, как отметка станет недействительной.
Общее соглашение для mark состоит в том, что, если метод markSupported возвращает true, поток каким-либо образом запоминает все байты, считанные после вызова mark, и готов снова предоставить те же байты, если и когда будет вызван метод reset. Однако поток не обязан запоминать какие-либо данные, если до вызова reset из него было считано больше readlimit байтов.
Установка отметки в закрытом потоке не должна влиять на поток.
- Требования к реализации:
- Метод
markклассаInputStreamничего не делает. - Параметры:
-
readlimit— максимальное количество байтов, которое можно считать до того, как отметка станет недействительной. - См. также:
reset
public void reset() throws IOException
mark. Общее соглашение для reset таково:
- Если метод
markSupportedвозвращаетtrue, то:- Если метод
markне вызывался после создания потока или количество байтов, считанных из потока с момента последнего вызоваmark, превышает аргумент, переданный вmarkпри этом последнем вызове, может быть выброшеноIOException. - Если такое
IOExceptionне выброшено, поток переводится в состояние, при котором все байты, считанные после последнего вызоваmark(или с начала файла, еслиmarkне вызывался), будут повторно предоставлены последующим вызывающим методаread, а за ними последуют любые байты, которые в противном случае были бы следующими входными данными на момент вызоваreset.
- Если метод
- Если метод
markSupportedвозвращаетfalse, то:- Вызов
resetможет выброситьIOException. - Если
IOExceptionне выброшено, поток переводится в фиксированное состояние, которое зависит от конкретного типа входного потока и способа его создания. Байты, которые будут предоставлены последующим вызывающим методаread, зависят от конкретного типа входного потока.
- Вызов
- Требования к реализации:
- Метод
resetклассаInputStreamничего не делает, кроме выбрасыванияIOException. - Выбрасывает:
-
IOException— если для этого потока не была установлена отметка или если отметка стала недействительной. - См. также:
markSupported
public boolean markSupported()
mark и reset. Поддержка или отсутствие поддержки mark и reset является неизменным свойством конкретного экземпляра входного потока.- Требования к реализации:
- Метод
markSupportedклассаInputStreamвозвращаетfalse. - Возвращает:
-
true, если этот экземпляр потока поддерживает методы mark и reset; в противном случае —false. - См. также:
transferTo
public long transferTo(OutputStream out) throws IOException
Этот метод может блокировать выполнение на неопределённое время при считывании из входного потока или записи в выходной поток. Поведение в случае асинхронного закрытия входного и/или выходного потока или прерывания потока выполнения во время передачи в значительной степени зависит от конкретного входного и выходного потока и поэтому не определено.
Если общее количество переданных байтов превышает Long.MAX_VALUE, возвращается Long.MAX_VALUE.
Если при считывании из входного потока или записи в выходной поток возникает ошибка ввода-вывода, она может произойти после считывания или записи части байтов. Следовательно, входной поток может не достичь конца, а один или оба потока могут оказаться в несогласованном состоянии. Настоятельно рекомендуется незамедлительно закрыть оба потока при возникновении ошибки ввода-вывода.
- Параметры:
-
out— выходной поток, не равный null - Возвращает:
- количество переданных байтов
- Выбрасывает:
-
IOException— если при чтении или записи произошла ошибка ввода-вывода -
NullPointerException— еслиoutравноnull - Начиная с версии:
- 9
© 1993, 2025, 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/25/docs/api/java.base/java/io/InputStream.html