Интерфейс DataInput
- Все известные подинтерфейсы:
-
ImageInputStream,ImageOutputStream,ObjectInput
- Все известные реализующие классы:
-
DataInputStream,FileCacheImageInputStream,FileCacheImageOutputStream,FileImageInputStream,FileImageOutputStream,ImageInputStreamImpl,ImageOutputStreamImpl,MemoryCacheImageInputStream,MemoryCacheImageOutputStream,ObjectInputStream,RandomAccessFile
public interface DataInput
DataInput позволяет читать байты из двоичного потока и восстанавливать из них данные в любом из типов примитивных Java. Также есть возможность восстановить String из данных в формате изменённого UTF-8. Во всех процедурах чтения в этом интерфейсе, если конец файла достигнут до того, как было прочитано необходимое количество байтов, выбрасывается EOFException (который является типом IOException). Если какой-либо байт не может быть прочитан по любой причине, кроме конца файла, выбрасывается IOException кроме EOFException. В частности, может быть выброшено IOException, если входной поток был закрыт.
Изменённый UTF-8
Реализации интерфейсов DataInput и DataOutput представляют строки Unicode в формате, являющемся небольшим изменением UTF-8. (Для получения информации о стандартном формате UTF-8 см. раздел 3.9 Форматы кодирования Unicode в The Unicode Standard, Version 4.0)
- Символы в диапазоне от
'\u0001'до'\u007F'представляются одним байтом. - Нулевой символ
'\u0000'и символы в диапазоне от'\u0080'до'\u07FF'представляются парой байтов. - Символы в диапазоне от
'\u0800'до'\uFFFF'представляются тремя байтами.
| Значение | Байт | Значения битов | |||||||
|---|---|---|---|---|---|---|---|---|---|
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
\u0001 до \u007F | 1 | 0 | биты 6-0 | ||||||
\u0000,\u0080 до \u07FF | 1 | 1 | 1 | 0 | биты 10-6 | ||||
| 2 | 1 | 0 | биты 5-0 | ||||||
\u0800 до \uFFFF | 1 | 1 | 1 | 1 | 0 | биты 15-12 | |||
| 2 | 1 | 0 | биты 11-6 | ||||||
| 3 | 1 | 0 | биты 5-0 | ||||||
Различия между этим форматом и стандартным форматом UTF-8 следующие:
- Нулевой байт
'\u0000'кодируется в 2-байтовом формате, а не в 1-байтовом, чтобы закодированные строки никогда не содержали вставленных нулей. - Используются только форматы 1 байт, 2 байта и 3 байта.
- Дополнительные символы представляются в виде пар суррогатов.
- С:
- 1.0
- См. также:
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
readBoolean() |
Читает один входной байт и возвращает true, если этот байт не равен нулю, false, если этот байт равен нулю. |
byte |
readByte() |
Читает и возвращает один входной байт. |
char |
readChar() |
Читает два входных байта и возвращает значение типа char. |
double |
readDouble() |
Читает восемь входных байтов и возвращает значение типа double. |
float |
readFloat() |
Читает четыре входных байта и возвращает значение типа float. |
void |
readFully |
Читает несколько байтов из входного потока и сохраняет их в массив буфера b. |
void |
readFully |
Читает len байтов из входного потока. |
int |
readInt() |
Читает четыре входных байта и возвращает значение типа int. |
String |
readLine() |
Читает следующую строку текста из входного потока. |
long |
readLong() |
Читает восемь входных байтов и возвращает значение типа long. |
short |
readShort() |
Читает два входных байта и возвращает значение типа short. |
int |
readUnsignedByte() |
Читает один входной байт, беззнаково расширяет его до типа int и возвращает результат, который, следовательно, находится в диапазоне от 0 до 255. |
int |
readUnsignedShort() |
Читает два входных байта и возвращает значение типа int в диапазоне от 0 до 65535. |
String |
readUTF() |
Читает строку, закодированную в формате изменённого UTF-8. |
int |
skipBytes |
Пытается пропустить n байтов данных из входного потока, удаляя пропущенные байты. |
Подробности методов
readFully
void readFully(byte[] b) throws IOException
b. Количество считанных байтов равно длине b. Этот метод блокируется до тех пор, пока не выполнится одно из следующих условий:
-
b.lengthбайты входных данных доступны, в этом случае выполняется обычное возвращение. - Обнаружен конец файла, в этом случае выбрасывается
EOFException. - Возникает ошибка ввода-вывода, в этом случае выбрасывается
IOExceptionотличная отEOFException.
Если b равно null, выбрасывается NullPointerException. Если b.length равно нулю, то байты не считываются. В противном случае первый считанный байт сохраняется в элемент b[0], следующий - в b[1], и так далее. Если из этого метода выбрасывается исключение, то возможно, что некоторые, но не все байты b были обновлены данными из входного потока.
- Параметры:
-
b- буфер, в который считываются данные. - Исключения:
-
NullPointerException- еслиbравноnull. -
EOFException- если этот поток достигает конца, прежде чем прочитать все байты. -
IOException- если произошла ошибка ввода-вывода.
readFully
void readFully(byte[] b, int off, int len) throws IOException
len байтов из входного потока. Этот метод блокируется до тех пор, пока не выполнится одно из следующих условий:
-
lenбайты входных данных доступны, в этом случае выполняется обычное возвращение. - Обнаружен конец файла, в этом случае выбрасывается
EOFException. - Возникает ошибка ввода-вывода, в этом случае выбрасывается
IOExceptionотличная отEOFException.
Если b равно null, выбрасывается NullPointerException. Если off отрицательное, или len отрицательное, или off+len больше длины массива b, выбрасывается IndexOutOfBoundsException. Если len равно нулю, то байты не считываются. В противном случае первый считанный байт сохраняется в элемент b[off], следующий - в b[off+1], и так далее. Количество считанных байтов, самое большее, равно len.
- Параметры:
-
b- буфер, в который считываются данные. -
off- целое число, определяющее смещение в массиве данныхb. -
len- целое число, определяющее количество байтов для считывания. - Исключения:
-
NullPointerException- еслиbравноnull. -
IndexOutOfBoundsException- еслиoffотрицательное,lenотрицательное илиlenбольшеb.length - off. -
EOFException- если этот поток достигает конца, прежде чем прочитать все байты. -
IOException- если произошла ошибка ввода-вывода.
skipBytes
int skipBytes(int n) throws IOException
n байтов данных из входного потока, отбрасывая пропущенные байты. Однако может пропустить меньшее количество байтов, возможно, ноль. Это может произойти по ряду причин; достижение конца файла до того, как было пропущено n байтов, — всего лишь один из вариантов. Этот метод никогда не выбрасывает EOFException. Возвращается фактическое количество пропущенных байтов.- Параметры:
-
n- количество байтов для пропуска. - Возвращаемое значение:
- количество фактически пропущенных байтов.
- Исключения:
-
IOException- если произошла ошибка ввода-вывода.
readBoolean
boolean readBoolean() throws IOException
true, если этот байт не равен нулю, false, если этот байт равен нулю. Этот метод подходит для чтения байта, записанного методом writeBoolean интерфейса DataOutput.- Возвращаемое значение:
- считанное значение
boolean. - Исключения:
-
EOFException- если этот поток достигает конца, прежде чем прочитать все байты. -
IOException- если произошла ошибка ввода-вывода.
readByte
byte readByte() throws IOException
-128 по 127, включительно. Этот метод подходит для чтения байта, записанного методом writeByte интерфейса DataOutput.- Возвращаемое значение:
- считанное 8-битное значение.
- Исключения:
-
EOFException- если этот поток достигает конца, прежде чем прочитать все байты. -
IOException- если произошла ошибка ввода-вывода.
readUnsignedByte
int readUnsignedByte() throws IOException
int, не расширяя знак, и возвращает результат, который, следовательно, находится в диапазоне 0 по 255. Этот метод подходит для чтения байта, записанного методом writeByte интерфейса DataOutput, если аргумент метода writeByte предполагалось значение в диапазоне 0 по 255.- Возвращаемое значение:
- считанное беззнаковое 8-битное значение.
- Исключения:
-
EOFException- если этот поток достигает конца, прежде чем прочитать все байты. -
IOException- если произошла ошибка ввода-вывода.
readShort
short readShort() throws IOException
short. Пусть a — первый считанный байт, а b — второй байт. Возвращаемое значение: (short)((a << 8) | (b & 0xff))
Этот метод подходит для чтения байтов, записанных методом writeShort интерфейса DataOutput.- Возвращаемое значение:
- считанное 16-битное значение.
- Исключения:
-
EOFException- если этот поток достигает конца, прежде чем прочитать все байты. -
IOException- если произошла ошибка ввода-вывода.
readUnsignedShort
int readUnsignedShort() throws IOException
int в диапазоне 0 по 65535. Пусть a — первый считанный байт, а b — второй байт. Возвращаемое значение: (((a & 0xff) << 8) | (b & 0xff))
Этот метод подходит для чтения байтов, записанных методом writeShort интерфейса DataOutput, если аргумент метода writeShort предполагалось значение в диапазоне 0 по 65535.- Возвращаемое значение:
- считанное беззнаковое 16-битное значение.
- Исключения:
-
EOFException- если этот поток достигает конца, прежде чем прочитать все байты. -
IOException- если произошла ошибка ввода-вывода.
readChar
char readChar() throws IOException
char. Пусть a — первый считанный байт, а b — второй байт. Возвращаемое значение: (char)((a << 8) | (b & 0xff))
Этот метод подходит для чтения байтов, записанных методом writeChar интерфейса DataOutput.- Возвращаемое значение:
- считанное значение типа
char. - Исключения:
-
EOFException- если этот поток достигает конца, прежде чем прочитать все байты. -
IOException- если произошла ошибка ввода-вывода.
readInt
int readInt() throws IOException
int. Пусть a-d — первый, второй, третий и четвертый считанные байты. Возвращаемое значение:
(((a & 0xff) << 24) | ((b & 0xff) << 16) |
((c & 0xff) << 8) | (d & 0xff))
Этот метод подходит для чтения байтов, записанных методом writeInt интерфейса DataOutput.- Возвращаемое значение:
- считанное значение типа
int. - Исключения:
-
EOFException- если этот поток достигает конца, прежде чем прочитать все байты. -
IOException- если произошла ошибка ввода-вывода.
readLong
long readLong() throws IOException
long. Пусть a-h — первый по восьмой считанные байты. Возвращаемое значение:
(((long)(a & 0xff) << 56) |
((long)(b & 0xff) << 48) |
((long)(c & 0xff) << 40) |
((long)(d & 0xff) << 32) |
((long)(e & 0xff) << 24) |
((long)(f & 0xff) << 16) |
((long)(g & 0xff) << 8) |
((long)(h & 0xff)))
Этот метод подходит для чтения байтов, записанных методом writeLong интерфейса DataOutput.
- Возвращаемое значение:
- считанное значение типа
long. - Исключения:
-
EOFException- если этот поток достигает конца, прежде чем прочитать все байты. -
IOException- если произошла ошибка ввода-вывода.
readFloat
float readFloat() throws IOException
float. Для этого сначала создается значение типа int точно так же, как в методе readInt, а затем это значение типа int преобразуется в float точно так же, как в методе Float.intBitsToFloat. Этот метод подходит для чтения байтов, записанных методом writeFloat интерфейса DataOutput.- Возвращаемое значение:
- считанное значение типа
float. - Исключения:
-
EOFException- если этот поток достигает конца, прежде чем прочитать все байты. -
IOException- если произошла ошибка ввода-вывода.
readDouble
double readDouble() throws IOException
double. Это делается путём сначала построения значения типа long точно так же, как и в методе readLong, а затем преобразования этого значения типа long в значение типа double точно так же, как и в методе Double.longBitsToDouble. Данный метод подходит для чтения байтов, записанных методом writeDouble интерфейса DataOutput.- Возвращает:
- считанное значение типа
double. - Исключение:
-
EOFException- если поток достиг конца перед чтением всех байтов. -
IOException- если произошла ошибка ввода-вывода.
readLine
String readLine() throws IOException
String. Обратите внимание, что поскольку этот метод обрабатывает байты, он не поддерживает ввод полного набора символов Юникод. Если в ходе чтения достигнут конец файла, даже если ни один байт ещё не был прочитан, то возвращается null. В противном случае каждый прочитанный байт преобразуется в тип char путём расширения нулями. Если встретится символ '\n', он игнорируется, и чтение прекращается. Если встретится символ '\r', он игнорируется, и если следующий байт преобразуется в символ '\n', то и он игнорируется; чтение прекращается. Если конец файла встретится до того, как встретятся символы '\n' и '\r', чтение прекращается. После прекращения чтения возвращается String, содержащая все прочитанные и не отброшенные символы в том порядке, в котором они были прочитаны. Обратите внимание, что каждое значение символа в этой строке будет меньше \u0100, то есть (char)256.
- Возвращает:
- следующую строку текста из входного потока, или
null, если конец файла достигнут до того, как был прочитан хоть один байт. - Исключение:
-
IOException- если произошла ошибка ввода-вывода.
readUTF
String readUTF() throws IOException
readUTF заключается в том, что он читает представление строки Unicode, закодированной в формате модифицированного UTF-8; эта строка символов затем возвращается в виде String. Сначала считываются два байта, которые используются для построения беззнакового 16-битного целого числа точно так же, как и в методе readUnsignedShort. Это целое значение называется длиной UTF и определяет количество дополнительных байтов, которые необходимо прочитать. Эти байты затем преобразуются в символы, рассматривая их группами. Длина каждой группы вычисляется из значения первого байта группы. Байты, следующие за группой, если таковые имеются, являются первыми байтами следующей группы.
Если первый байт группы соответствует битовой последовательности 0xxxxxxx (где x означает "может быть 0 или 1"), то группа состоит только из этого байта. Байты расширяются нулями до формирования символа.
Если первый байт группы соответствует битовой последовательности 110xxxxx, то группа состоит из этого байта a и второго байта b. Если байта b нет (потому что байт a был последним из прочитанных байтов), или если байт b не соответствует битовой последовательности 10xxxxxx, то выбрасывается исключение UTFDataFormatException. В противном случае группа преобразуется в символ:
(char)(((a & 0x1F) << 6) | (b & 0x3F))
Если первый байт группы соответствует битовой последовательности 1110xxxx, то группа состоит из этого байта a и двух дополнительных байтов b и c. Если байта c нет (потому что байт a был одним из двух последних прочитанных байтов), или байт b или байт c не соответствует битовой последовательности 10xxxxxx, то выбрасывается исключение UTFDataFormatException. В противном случае группа преобразуется в символ:
(char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))
Если первый байт группы соответствует последовательности 1111xxxx или последовательности 10xxxxxx, то выбрасывается исключение UTFDataFormatException. Если во время всего этого процесса будет достигнут конец файла, то выбрасывается исключение EOFException.
После преобразования каждой группы в символ в указанном порядке, полученные символы собираются в String, который и возвращается.
Метод writeUTF интерфейса DataOutput может использоваться для записи данных, пригодных для чтения этим методом.
- Возвращает:
- строку Unicode.
- Исключение:
-
EOFException- если поток достиг конца перед чтением всех байтов. -
IOException- если произошла ошибка ввода-вывода. -
UTFDataFormatException- если байты не представляют собой допустимого кодирования строки в модифицированном UTF-8.
© 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/DataInput.html