каковы основы сериализации в java включая интерфейс serializable и ключевое слово transient

Аватар пользователя Maksim Litvinov
Maksim Litvinov
11 ноября 2024

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

Чтобы объект мог быть сериализован, его класс должен реализовывать интерфейс Serializable. Этот интерфейс не содержит методов. Он служит только для обозначения того, что объект может быть сериализован

import java.io.Serializable;

public class Person implements Serializable {
  private String name;
  private int age;

  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  // Геттеры и сеттеры
}

Если нужно исключить определенные поля из процесса сериализации, вы можете объявить их с помощью ключевого слова transient. Это означает, что при сериализации объекта значение данного поля не будет сохранено.

public class Person implements Serializable {
    private String name;
    private int age;
    transient private String password; // Это поле не будет сериализовано

    public Person(String name, int age, String password) {
        this.name = name;
        this.age = age;
        this.password = password;
    }

    // Геттеры и сеттеры
}

Для примера сериализуем и десериализуем объект класса Person:

import java.io.*;

public class SerializationExample {
    public static void main(String[] args) {
        Person person = new Person("Alice", 30, "secretPassword");

        // Сериализация
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) {
            oos.writeObject(person);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // Десериализация
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) {
            Person deserializedPerson = (Person) ois.readObject();
            System.out.println("Name: " + deserializedPerson.getName());
            System.out.println("Age: " + deserializedPerson.getAge());
            System.out.println("Password: " + deserializedPerson.getPassword()); // Это будет null
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
0 0