Какой класс позволяет читать данные из входного байтового потока в формате примитивных типов данных?
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.