Интерфейс 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'представляются одним байтом. - Символ null
'\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 следующие:
- Байт null
'\u0000'кодируется в 2-байтовом формате, а не в 1-байтовом, таким образом, закодированные строки никогда не содержат вложенных null-символов. - Используются только 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.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. Обратите внимание, что поскольку этот метод обрабатывает байты, он не поддерживает ввод всего набора символов Unicode. Если встречается конец файла, прежде чем будет прочитан хотя бы один байт, то возвращается 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, 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/DataInput.html