/
Вопросы и ответы
/
Java
/

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

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

2 года назад

Nikolai Gagarinov

Ответы

0

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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. Это означает, что при сериализации объекта значение данного поля не будет сохранено.

1
2
3
4
5
6
7
8
9
10
11
12
13
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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();
        }
    }
}

2 года назад

Maksim Litvinov

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845