Spec-Zone.ru › OpenJDK 24

Интерфейс 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' представляются тремя байтами.
Кодирование значений 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' кодируется в формате 2 байта, а не 1 байта, чтобы кодированные строки не содержали вложенных нулей.
  • Используются только форматы 1, 2 и 3 байта.
  • Дополнительные символы представлены в виде пар суррогатов.
С:
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. Обратите внимание, что поскольку этот метод обрабатывает байты, он не поддерживает ввод всего набора символов Юникод.

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

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

readUTF

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

Spec-Zone.ru

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