Интерфейс 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 заключается в том, что он считывает представление строки символов Юникод, закодированной в формате изменённый 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 может использоваться для записи данных, пригодных для считывания этим методом.
- Возвращает:
- строку Юникод.
- Исключения:
-
EOFException- если этот поток достигает конца перед считыванием всех байтов. -
IOException- если произошла ошибка ввода-вывода. -
UTFDataFormatException- если байты не представляют собой корректное кодирование строки в формате изменённый UTF-8.
© 1993, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/io/DataInput.html