Класс InputStream
- java.lang.Object
-
- java.io.InputStream
- Все реализованные интерфейсы:
- Closeable, AutoCloseable
- Прямые известные подклассы:
- AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream
public abstract class InputStream extends Object implements Closeable
Этот абстрактный класс является суперклассом всех классов, представляющих поток ввода байтов.
Приложениям, которым необходимо определить подкласс InputStream , всегда необходимо предоставить метод, возвращающий следующий байт ввода.
- С тех пор:
- JDK1.0
- См. также:
-
BufferedInputStream,ByteArrayInputStream,DataInputStream,FilterInputStream,read(),OutputStream,PushbackInputStream
Конструкторы
| Конструктор и описание |
|---|
InputStream() |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
int |
available() Возвращает оценку количества байтов, которые можно прочитать (или пропустить) из этого потока ввода без блокировки до следующего вызова метода для этого потока ввода. |
void |
close() Закрывает этот поток ввода и высвобождает любые системные ресурсы, связанные с потоком. |
void |
mark(int readlimit) Помечает текущую позицию в этом потоке ввода. |
boolean |
markSupported() Проверяет, поддерживает ли этот поток ввода методы |
abstract int |
read() Читает следующий байт данных из потока ввода. |
int |
read(byte[] b) Читает некоторое количество байтов из потока ввода и сохраняет их в массив байтов |
int |
read(byte[] b,
int off,
int len) Читает до |
void |
reset() Перемещает этот поток в позицию, существовавшую в момент последнего вызова метода |
long |
skip(long n) Пропускает и отбрасывает |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
InputStream
public InputStream()
Методы
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()
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 Возвращает оценку количества байтов, которые можно прочитать (или пропустить) из этого потока ввода без блокировки до следующего вызова метода для данного потока ввода. Следующий вызов может быть выполнен той же или другой нитью.
Обратите внимание, что, хотя некоторые реализации InputStream возвращают общее количество байтов в потоке, многие из них не делают этого. Использование возвращаемого значения этого метода для выделения буфера, предназначенного для хранения всех данных в этом потоке, никогда не является корректным.
Реализация этого метода в подклассе может выбрать выброс исключения IOException, если этот поток ввода был закрыт с помощью вызова метода close().
Метод available для класса InputStream всегда возвращает 0.
Этот метод должен быть переопределен подклассами.
- Возвращает:
- оценка количества байтов, которые можно прочитать (или пропустить) из этого потока ввода без блокировки, или
0при достижении конца потока ввода. - Выбрасывает:
-
IOException- если произошла ошибка ввода-вывода.
close
public void close()
throws IOException Закрывает этот поток ввода и высвобождает все системные ресурсы, связанные с потоком.
Метод close для InputStream ничего не делает.
- Определено в:
-
closeв интерфейсеCloseable - Определено в:
-
closeв интерфейсеAutoCloseable - Выбрасывает:
-
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.
© 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.