Spec-Zone.ru › OpenJDK 24

Класс 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)
Считывает все байты из этого потока ввода и записывает байты в заданный поток вывода в том порядке, в котором они читаются.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

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. Однако поток не обязан запоминать какие-либо данные, если из потока прочитано более readlimit байтов до вызова reset.

Пометка закрытого потока не должна оказывать никакого влияния на поток.

Требования к реализации:
Метод 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

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/io/InputStream.html

Spec-Zone.ru

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