Класс 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() | Проверяет, поддерживает ли этот поток ввода методы |
static InputStream | nullInputStream() | Возвращает новый |
abstract int | read() | Читает следующий байт данных из потока ввода. |
int | read(byte[] b) | Читает некоторое количество байтов из потока ввода и сохраняет их в массив байтов |
int | read(byte[] b,
int off,
int len) | Читает до |
byte[] | readAllBytes() | Читает все оставшиеся байты из потока ввода. |
int | readNBytes(byte[] b,
int off,
int len) | Читает запрошенное количество байтов из потока ввода в заданный массив байтов. |
byte[] | readNBytes(int len) | Читает до указанного числа байтов из потока ввода. |
void | reset() | Перемещает этот поток в позицию, существовавшую в момент, когда метод |
long | skip(long 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), и transferTo() ведут себя так, как если бы конец потока был достигнут. После закрытия потока эти методы выбрасывают IOException.
Метод markSupported() возвращает false. Метод mark() ничего не делает, а метод reset() выбрасывает IOException.
- Возвращает:
- a
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] и элементы 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- если произошла ошибка ввода-вывода.
available
public int available()
throws IOException Возвращает оценку количества байтов, которые можно прочитать (или пропустить) из этого входного потока без блокировки, что может быть 0, или 0, когда обнаружен конец потока. Чтение может происходить в том же потоке или в другом потоке. Одно чтение или пропуск такого количества байтов не заблокирует, но может прочитать или пропустить меньше байтов.
Обратите внимание, что хотя некоторые реализации 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()
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- если этот поток не был помечен или метка была аннулирована. - См. также:
-
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 Считывает все байты из этого входного потока и записывает байты в заданный выходной поток в порядке их чтения. По возвращении этот входной поток будет находиться в конце потока. Этот метод не закрывает ни один поток.
Этот метод может блокироваться неопределенно долго, считывая данные из входного потока или записывая данные в выходной поток. Поведение в случае асинхронного закрытия входного и/или выходного потока или прерывания потока во время передачи определяется входным и выходным потоками и поэтому не определено.
Если при чтении из входного потока или записи в выходной поток возникает ошибка ввода-вывода, она может произойти после того, как некоторые байты были прочитаны или записаны. В результате входной поток может не находиться в конце потока, и один или оба потока могут быть в несогласованном состоянии. Сильно рекомендуется немедленно закрыть оба потока, если произошла ошибка ввода-вывода.
- Параметры:
-
out- выходной поток, не null - Возвращает:
- количество переданных байтов
- Выбрасывает:
-
IOException- если произошла ошибка ввода-вывода при чтении или записи -
NullPointerException- еслиoutравноnull - С:
- 9
© 1993, 2020, 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/11/docs/api/java.base/java/io/InputStream.html