Spec-Zone.ru › OpenJDK 25

Интерфейс 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 документа Стандарт Unicode, версия 4.0.)

  • Символы в диапазоне '\u0001'–'\u007F' представляются одним байтом.
  • Нулевой символ '\u0000' и символы в диапазоне '\u0080'–'\u07FF' представляются парой байтов.
  • Символы в диапазоне '\u0800'–'\uFFFF' представляются тремя байтами.
Кодирование значений UTF-8
Значение Байт Значения битов
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' кодируется в двухбайтовом формате, а не в однобайтовом, поэтому в закодированных строках никогда не встречаются встроенные нулевые байты.
  • Используются только однобайтовый, двухбайтовый и трёхбайтовый форматы.
  • Дополнительные символы представляются в виде суррогатных пар.
Начиная с:
1.0
См. также:
  • DataInputStream
  • DataOutput

Краткое описание методов

Модификатор и тип Метод Описание
boolean readBoolean()
Читает один входной байт и возвращает true, если этот байт ненулевой, и false, если он равен нулю.
byte readByte()
Читает и возвращает один входной байт.
char readChar()
Читает два входных байта и возвращает значение типа char.
double readDouble()
Читает восемь входных байтов и возвращает значение типа double.
float readFloat()
Читает четыре входных байта и возвращает значение типа float.
void readFully(byte[] b)
Читает несколько байтов из входного потока и сохраняет их в буферный массив b.
void readFully(byte[] b, int off, int len)
Читает 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(int n)
Пытается пропустить 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. Обратите внимание, что, поскольку этот метод обрабатывает байты, он не поддерживает ввод полного набора символов Unicode.

Если конец файла встречен до того, как удалось прочитать хотя бы один байт, возвращается null. В противном случае каждый прочитанный байт преобразуется в тип char расширением нулями. Если встречается символ '\n', он отбрасывается и чтение прекращается. Если встречается символ '\r', он отбрасывается и, если следующий байт преобразуется в символ '\n', этот символ также отбрасывается; после этого чтение прекращается. Если конец файла встречен до появления одного из символов '\n' и '\r', чтение прекращается. По завершении чтения возвращается String, содержащая все прочитанные и не отброшенные символы в исходном порядке. Обратите внимание, что значение каждого символа в этой строке будет меньше \u0100, то есть (char)256.

Возвращает:
следующую строку текста из входного потока или null, если конец файла встретился до чтения байта.
Исключения:
IOException — если происходит ошибка ввода-вывода.

readUTF

String readUTF() throws IOException
Считывает строку, закодированную в формате модифицированного UTF-8. Общий контракт 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.

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, который содержит более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/io/DataInput.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API