Классы DataOutputStream и DataInputStream

Последнее обновление: 26.04.2018

Классы DataOutputStream и DataInputStream позволяют записывать и считывать данные примитивных типов.

Запись данных и DataOutputStream

Класс DataOutputStream представляет поток вывода и предназначен для записи данных примитивных типов, таких, как int, double и т.д. Для записи каждого из примитивных типов предназначен свой метод:

  • writeBoolean(boolean v) : записывает в поток булевое однобайтовое значение

  • writeByte(int v): записывает в поток 1 байт, которые представлен в виде целочисленного значения

  • writeChar(int v): записывает 2-байтовое значение char

  • writeDouble(double v): записывает в поток 8-байтовое значение double

  • writeFloat(float v): записывает в поток 4-байтовое значение float

  • writeInt(int v): записывает в поток целочисленное значение int

  • writeLong(long v): записывает в поток значение long

  • writeShort(int v): записывает в поток значение short

  • writeUTF(String str): записывает в поток строку в кодировке UTF-8

Считывание данных и DataInputStream

Класс DataInputStream действует противоположным образом - он считывает из потока данные примитивных типов. Соответственно для каждого примитивного типа определен свой метод для считывания:

  • boolean readBoolean(): считывает из потока булевое однобайтовое значение

  • byte readByte(): считывает из потока 1 байт

  • char readChar(): считывает из потока значение char

  • double readDouble(): считывает из потока 8-байтовое значение double

  • float readFloat(): считывает из потока 4-байтовое значение float

  • int readInt(): считывает из потока целочисленное значение int

  • long readLong(): считывает из потока значение long

  • short readShort(): считывает значение short

  • String readUTF(): считывает из потока строку в кодировке UTF-8

  • int skipBytes(int n): пропускает при чтении из потока n байтов

Рассмотрим применение классов на примере:

import java.io.*;

public class Program {
 
    public static void main(String[] args) {
         
        Person tom = new Person("Tom", 34, 1.68, false);
		// запись в файл
        try(DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.bin")))
        {
           // записываем значения
            dos.writeUTF(tom.name);
            dos.writeInt(tom.age);
            dos.writeDouble(tom.height);
            dos.writeBoolean(tom.married);
            System.out.println("File has been written");
        }
        catch(IOException ex){
             
            System.out.println(ex.getMessage());
        }  
         
        // обратное считывание из файла
        try(DataInputStream dos = new DataInputStream(new FileInputStream("data.bin")))
        {
           // записываем значения
            String name = dos.readUTF();
            int age = dos.readInt();
            double height = dos.readDouble();
            boolean married = dos.readBoolean();
            System.out.printf("Name: %s  Age: %d  Height: %f  Married: %b", 
                    name, age, height, married);
        }
        catch(IOException ex){
             
            System.out.println(ex.getMessage());
        }  
    } 
}
 
class Person
{
    public String name;
    public int age;
    public double height;
    public boolean married;
     
    public Person(String n, int a, double h, boolean m)
    {
        this.name=n;
        this.height=h;
        this.age=a;
        this.married=m;
    }
}

Здесь мы последовательно записываем в файл данные объекта Person.

Объект DataOutputStream в конструкторе принимает поток вывода: DataOutputStream (OutputStream out). В данном случае в качестве потока вывода используется объект FileOutputStream, поэтому вывод будет происходить в файл. И с помощью выше рассмотренных методов типа writeUTF() производится запись значений в бинарный файл.

Затем происходит чтение ранее записанных данных. Объект DataInputStream в конструкторе принимает поток для чтения: DataInputStream(InputStream in). Здесь таким потоком выступает объект FileInputStream

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850