Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Сериализация объектов в Java: сохранение и восстановление состояния

Сериализация — представление объекта как последовательности байтов, включающей данные объекта, информацию о его типе и типах полей. Сериализованный объект можно записать в файл, затем прочитать и десериализовать (восстановить в памяти). Процесс независим от JVM: можно сериализовать на одной платформе, десериализовать на другой.

Ключевые классы

Условия сериализуемости

  1. Класс должен реализовывать java.io.Serializable (маркерный интерфейс).
  2. Все поля должны быть сериализуемыми. Нeseриализуемые поля помечаются transient.

Пример: класс Employee


public class Employee implements java.io.Serializable {
    public String name;
    public String address;
    public transient int SSN; // не сериализуется
    public int number;
    public void mailCheck() { System.out.println("Mailing check to " + name); }
}

Сериализация объекта


import java.io.*;

public class SerializeDemo {
    public static void main(String[] args) {
        Employee e = new Employee();
        e.name = "Reyan Ali";
        e.address = "Phokka Kuan, Ambehta Peer";
        e.SSN = 11122333;
        e.number = 101;
        try (FileOutputStream fileOut = new FileOutputStream("/tmp/employee.ser");
             ObjectOutputStream out = new ObjectOutputStream(fileOut)) {
            out.writeObject(e);
            System.out.printf("Serialized data saved in /tmp/employee.ser");
        } catch (IOException i) { i.printStackTrace(); }
    }
}

Стандартное расширение файла: .ser.

Десериализация объекта


import java.io.*;

public class DeserializeDemo {
    public static void main(String[] args) {
        Employee e = null;
        try (FileInputStream fileIn = new FileInputStream("/tmp/employee.ser");
             ObjectInputStream in = new ObjectInputStream(fileIn)) {
            e = (Employee) in.readObject();
        } catch (IOException i) { i.printStackTrace(); return; }
        catch (ClassNotFoundException c) {
            System.out.println("Employee class not found");
            c.printStackTrace(); return;
        }
        System.out.println("Deserialized Employee...");
        System.out.println("Name: " + e.name);
        System.out.println("Address: " + e.address);
        System.out.println("SSN: " + e.SSN); // 0, так как transient
        System.out.println("Number: " + e.number);
    }
}

Результат:


Deserialized Employee...
Name: Reyan Ali
Address: Phokka Kuan, Ambehta Peer
SSN: 0
Number: 101

Важные моменты

java

  1. Ключевое слово final в Java: переменные, методы и классы
  2. Оператор instanceof в Java: полное руководство с примерами
  3. Статические вложенные классы в Java: использование, отличия и примеры
  4. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  5. Паттерн Singleton в Java: как реализовать и безопасно использовать
  6. Рефлексия в Java: инспекция классов, методов и полей во время выполнения
  7. Освоение Java ObjectOutputStream: сериализация, методы и практические примеры
  8. Освоение Java Generics: создание переиспользуемого, типобезопасного кода
  9. Мастерство файловых операций в Java с java.io: создание, чтение, запись и удаление
  10. Java: объекты, классы и основные концепции ООП