Класс 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.
- Возвращает:
- a
InputStream, содержащий ноль байтов - С:
- 11
read
public abstract int read() throws IOException
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().
Метод available класса InputStream всегда возвращает 0.
Этот метод должен быть переопределён подклассами.
- Возвращает:
- оценка количества байтов, которые можно прочитать (или пропустить) из этого входного потока без блокировки или
0когда он достигнет конца входного потока. - Исключение:
-
IOException- если произошла ошибка ввода-вывода.
close
public void close() throws IOException
Метод close класса InputStream ничего не делает.
- Указано в:
-
closeв интерфейсеAutoCloseable - Указано в:
-
closeв интерфейсеCloseable - Исключение:
-
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. - Если такое исключение
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.transferTo
public long transferTo(OutputStream out) throws IOException
Этот метод может неопределенно блокироваться при чтении из потока ввода или записи в поток вывода. Поведение в случае, когда входной и/или выходной поток закрывается асинхронно, или поток прерывается во время передачи, сильно зависит от входного и выходного потоков, и поэтому не определено.
Если при чтении из потока ввода или записи в поток вывода произойдет ошибка ввода-вывода, то это может произойти после того, как некоторые байты были прочитаны или записаны. Следовательно, поток ввода может не достичь конца потока, и один или оба потока могут находиться в несогласованном состоянии. Сильно рекомендуется немедленно закрыть оба потока, если произойдет ошибка ввода-вывода.
- Параметры:
-
out- поток вывода, не null - Возвращает:
- количество переданных байтов
- Исключения:
-
IOException- если при чтении или записи произошла ошибка ввода-вывода -
NullPointerException- еслиoutявляетсяnull - С:
- 9
© 1993, 2021, 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/17/docs/api/java.base/java/io/InputStream.html