Запись и чтение примитивных типов с помощью DataOutputStream/DataInputStream

Запись и чтение примитивных типов с помощью DataOutputStream/DataInputStream

DataOutputStream/DataInputStream позволяют записывать и считывать в потоки ввода/вывода примитивные типы данных.
Данные, записанные с помощью DataOutputStream должны быть прочитаны только посредством DataInputStream, причём обязательно в том же порядке, в котором они были записаны.

DataOutputStream записывает байты для определённого типа данных. Каждый тип данных интерпретируется по-своему и занимает своё количество байт. Например, int занимает 4 байта, а double - 8 байт. Каждая операция записи преобразует свой тип данных в соответствующий ему набор байт. Аналогичным образом поступают и операции считывания: они создают требуемый тип данных из доступных байт.
Поэтому если данные будут считаны не в том порядке, в котором они были записаны, можно получить неожиданный результат.


FileOutputStream fos = new FileOutputStream(new File("myData.data"));
DataOutputStream dos = new DataOutputStream(fos);
FileInputStream fis = new FileInputStream("myData.data");
DataInputStream dis = new DataInputStream(fis);

dos.writeChar('A');
dos.writeDouble(99.0);
dos.writeBoolean(true);

System.out.println(dis.readInt()); // 4276312
System.out.println(dis.readInt()); // -1073741824
System.out.println(dis.readBoolean()); // false
И так развлекаться можно бесконечно:


System.out.println(dis.readBoolean()); // false
System.out.println(dis.readChar()); // 䅀
System.out.println(dis.readDouble()); // 3.2278123476086365E119
Потоки ввода/вывода