Gymterview
junior

Какой класс позволяет читать данные из входного байтового потока в формате примитивных типов данных?

DataInputStream — это обрабатывающий поток, предназначенный для чтения данных примитивных типов Java из входного байтового потока в машинно-независимом формате.

DataInputStream оборачивает другой InputStream и предоставляет типизированные методы для чтения каждого примитивного типа. Данные читаются в формате big-endian (старший байт первым), что гарантирует одинаковую интерпретацию данных на любой платформе. DataInputStream обычно используется в паре с DataOutputStream, который записывает данные в том же формате.

Методы чтения

Метод Читает Размер
readBoolean() булевое значение 1 байт
readByte() знаковый байт 1 байт
readUnsignedByte() беззнаковый байт 1 байт
readChar() символ char 2 байта
readShort() значение short 2 байта
readInt() значение int 4 байта
readLong() значение long 8 байт
readFloat() значение float 4 байта
readDouble() значение double 8 байт
readUTF() строку в модифицированной UTF-8 переменный

Пример

Пример
try (DataInputStream dis = new DataInputStream(
        new BufferedInputStream(new FileInputStream("data.bin")))) {
    int id = dis.readInt();
    double price = dis.readDouble();
    String name = dis.readUTF();
}

На практике DataInputStream используется для чтения бинарных файлов с известной структурой, сетевых протоколов и файлов, записанных через DataOutputStream. В современном коде для обмена структурированными данными чаще применяют JSON, Protocol Buffers или Apache Avro.

На собеседовании: назовите класс DataInputStream, перечислите несколько методов чтения (readInt(), readUTF(), readDouble()), упомяните формат big-endian и парность с DataOutputStream.