Топ-100Что такое сериализация в Java - CodOrbits
LogoCodOrbits

Раздел: Сериализация

Узнайте, как сериализовать и десериализовать объекты в Java для сохранения состояния и передачи данных.

Все разделы
Иконка Сериализация

Что такое сериализация в Java

Last updated: 7 мая 2025 г.

Что такое сериализация мы уже проходили в разделе потоки ввода/вывода, но повторим, так как это основы сериализации.

ObjectOutputStreamсериалиация. Для сохранения копии объекта в поток (в файл, например) для восстановления его потом (десереализацииObjectInputStream)

Пример программы:

1import java.io.*;
2import java.util.*;
3
4public class JustSerialization {
5    public static void main(String[] args) {
6        // сериализация
7        try (ObjectOutputStream oos =
8            new ObjectOutputStream(new FileOutputStream("person.dat"))) 
9        {
10            Person p = new Person("Sam", 33, 178, true);
11            oos.writeObject(p); // сохраняем объект p в файл person.dat
12        } 
13        catch (Exception ex) {
14            System.out.println(ex.getMessage());
15        }
16
17        // десериализация
18        try (ObjectInputStream ois =
19            new ObjectInputStream(new FileInputStream("person.dat"))) 
20        {
21            Person p = (Person) ois.readObject(); // достаем его оттуда
22            System.out.printf(
23                "Name: %s \t Age: %d \t Height: %f \t Married: %b \n",
24                p.getName(), p.getAge(), p.getHeight(), p.getMarried());
25        } 
26        catch (Exception ex) {
27            System.out.println(ex.getMessage());
28        }
29    }
30}
31
32// класс, объект которого мы сериализуем/десериализуем
33class Person implements Serializable {
34    private String name;
35    private int age;
36    private double height;
37    private boolean married;
38
39    Person(String n, int a, double h, boolean m) {
40        name = n; age = a; height = h; married = m;
41    }
42
43    String getName() { return name; }
44    int getAge() { return age; }
45    double getHeight() { return height; }
46    boolean getMarried() { return married; }
47}

Вывод:

Как видим, объект был полностью успешно восстановлен.

Search Icon

Сериализуемый объект должен имплементировать Serializable.

Все его поля тоже должны быть Serializable. Это важно. Простые типы типа int char и т.д. сериализуються и так, сложные же типы должны расширять Serializable.


Дополнительные материалы

Официальная документация Oracle по сериализации

Additional Material Icon
Divider

Сериализация в JSON (Gson, Jackson)

Additional Material Icon
Divider

Проблемы безопасности при десериализации

Additional Material Icon

Следующие уроки

Transient в Java

8
мин.

Similar Articles Icon
Divider

Контроль совместимости классов с помощью SerialVersionUID

9
мин.

Similar Articles Icon
Divider

Сериализация Singleton без утраты его сути

8
мин.

Similar Articles Icon