Spec-Zone.ru › OpenJDK 27

Класс InputStream

java.lang.Object
java.io.InputStream
Все реализуемые интерфейсы:
Closeable, AutoCloseable
Прямые известные подклассы:
AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream
public abstract class InputStream extends Object implements Closeable
Этот абстрактный класс является суперклассом всех классов, представляющих поток ввода байтов.

Приложения, которым необходимо определить подкласс InputStream, всегда должны предоставлять метод, возвращающий следующий байт входных данных.

С версии:
1.0
См. также:
  • BufferedInputStream
  • ByteArrayInputStream
  • DataInputStream
  • FilterInputStream
  • read()
  • OutputStream
  • PushbackInputStream

Краткое описание конструкторов

Конструктор Описание
InputStream()
Конструктор для вызова из подклассов.

Краткое описание методов

Модификатор и тип Метод Описание
int available()
Возвращает оценку количества байтов, которые можно прочитать (или пропустить) из этого потока ввода без блокировки; это значение может быть равно 0 или 0, если обнаружен конец потока.
void close()
Закрывает этот поток ввода и освобождает все системные ресурсы, связанные с ним.
void mark(int readlimit)
Помечает текущую позицию в этом потоке ввода.
boolean markSupported()
Проверяет, поддерживает ли этот поток ввода методы mark и reset.
static InputStream nullInputStream()
Возвращает новый InputStream, который не считывает байты.
abstract int read()
Считывает следующий байт данных из потока ввода.
int read(byte[] b)
Считывает некоторое количество байтов из потока ввода и сохраняет их в буферный массив b.
int read(byte[] b, int off, int len)
Считывает из потока ввода до len байтов данных в массив байтов.
byte[] readAllBytes()
Считывает все оставшиеся байты из потока ввода.
int readNBytes(byte[] b, int off, int len)
Считывает запрошенное количество байтов из потока ввода в указанный массив байтов.
byte[] readNBytes(int len)
Считывает из потока ввода до указанного количества байтов.
void reset()
Перемещает этот поток на позицию, соответствующую моменту последнего вызова метода mark для этого потока ввода.
long skip(long n)
Пропускает и отбрасывает n байтов данных из этого потока ввода.
void skipNBytes(long n)
Пропускает и отбрасывает ровно n байтов данных из этого потока ввода.
long transferTo(OutputStream out)
Считывает все байты из этого потока ввода и записывает их в указанный поток вывода в том порядке, в котором они были прочитаны.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли какой-либо другой объект этому объекту.
protected void finalize()
Устарело, планируется удалить: этот элемент API может быть удален в будущей версии.
Финализация устарела и может быть удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно после уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно после уведомления или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно после уведомления или прерывания, либо до истечения заданного промежутка реального времени.

Подробное описание конструкторов

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(byte[], int, int)

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
См. также:
  • read()

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(long)

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
См. также:
  • skip(long)

available

public int available() throws IOException
Возвращает оценочное количество байтов, которые можно считать из этого входного потока (или пропустить в нём) без блокировки. Это значение может быть равно 0, а также 0 при обнаружении конца потока. Считывание может выполняться в том же или другом потоке. Однократное считывание или пропуск такого количества байтов не приведёт к блокировке, однако фактически может быть считано или пропущено меньше байтов.

Обратите внимание, что хотя некоторые реализации 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()

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 — если для этого потока не была установлена отметка или отметка стала недействительной.
См. также:
  • mark(int)
  • IOException

markSupported

public boolean markSupported()
Проверяет, поддерживает ли этот входной поток методы mark и reset. Поддержка или отсутствие поддержки методов mark и reset является неизменным свойством конкретного экземпляра входного потока.
Требования к реализации:
Метод markSupported класса InputStream возвращает false.
Возвращает:
true, если этот экземпляр потока поддерживает методы mark и reset; в противном случае — false.
См. также:
  • mark(int)
  • reset()

transferTo

public long transferTo(OutputStream out) throws IOException
Считывает все байты из этого входного потока и записывает их в указанный выходной поток в том порядке, в котором они считываются. После возврата из метода этот входной поток будет находиться в конце. Этот метод не закрывает ни один из потоков.

Этот метод может бесконечно блокироваться при считывании из входного потока или записи в выходной поток. Поведение в случае асинхронного закрытия входного и/или выходного потока или прерывания потока выполнения во время передачи сильно зависит от конкретных входного и выходного потоков и поэтому не определено.

Если общее количество переданных байтов превышает Long.MAX_VALUE, будет возвращено Long.MAX_VALUE.

Если при считывании из входного потока или записи в выходной поток возникает ошибка ввода-вывода, она может произойти после считывания или записи некоторых байтов. Следовательно, входной поток может не достичь конца, а один или оба потока могут оказаться в несогласованном состоянии. Настоятельно рекомендуется незамедлительно закрыть оба потока при возникновении ошибки ввода-вывода.

Параметры:
out — выходной поток, не равный null
Возвращает:
количество переданных байтов
Выбрасывает:
IOException — если при считывании или записи произошла ошибка ввода-вывода
NullPointerException — если out равно null
Начиная с версии:
9

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API