Spec-Zone.ru › OpenJDK 17

Интерфейс 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' представляются тремя байтами.
Кодирование значений 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 следующие:

  • Байт null '\u0000' кодируется в 2-байтовом формате, а не в 1-байтовом, таким образом, закодированные строки никогда не содержат вложенных null-символов.
  • Используются только 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.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.

© 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

Spec-Zone.ru

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