Класс 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, или 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. Однако поток не обязан запоминать какие-либо данные, если из потока прочитано более readlimit байтов до вызова reset.
Пометка закрытого потока не должна оказывать никакого влияния на поток.
- Требования к реализации:
- Метод
markклассаInputStreamничего не делает. - Параметры:
-
readlimit- максимальный лимит байтов, которые могут быть прочитаны, прежде чем позиция метки станет недействительной. - См. также:
reset
public void reset() throws IOException
mark для этого потока ввода. Общий контракт метода reset таков:
- Если метод
markSupportedвозвращаетtrue, то:- Если метод
markне был вызван с момента создания потока или количество байтов, прочитанных из потока с момента последнего вызоваmark, больше, чем аргумент методаmarkв этом вызове, то может быть выброшено исключениеIOException. - Если такое исключение не выброшено, то поток сбрасывается в состояние, при котором все байты, прочитанные с момента последнего вызова
mark(или с начала файла, еслиmarkне был вызван), будут повторно предоставлены последующим вызывающим методамread, за которыми следуют любые байты, которые в противном случае были бы следующими данными ввода на момент вызоваreset.
- Если метод
- Если метод
markSupportedвозвращаетfalse, то:- Вызов
resetможет выбросить исключение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 - C момента:
- 9
© 1993, 2023, 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/21/docs/api/java.base/java/io/InputStream.html