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

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

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

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

import java.io.*; import java.util.*; public class JustSerialization { public static void main(String[] args) { // сериализация try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(“person.dat”))) { Person p = new Person(“Sam”, 33, 178, true); oos.writeObject(p); // сохраняем объект p в файл person.dat } catch (Exception ex) { System.out.println(ex.getMessage()); } // десериализация try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(“person.dat”))) { Person p = (Person) ois.readObject(); // достаем его оттуда System.out.printf( “Name: %s \t Age: %d \t Height: %f \t Married: %b \n”, p.getName(), p.getAge(), p.getHeight(), p.getMarried()); } catch (Exception ex) { System.out.println(ex.getMessage()); } } } // класс, объект которого мы сериализуем/десериализуем class Person implements Serializable { private String name; private int age; private double height; private boolean married; Person(String n, int a, double h, boolean m) { name = n; age = a; height = h; married = m; } String getName() { return name; } int getAge() { return age; } double getHeight() { return height; } boolean getMarried() { return married; } }

Вывод:

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

Search Icon

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

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

Transient в Java

Ключевое слово transient в Java: как исключить поля из сериализации. Практическое руководство по работе с несериализуемыми данными.

Time to read: 8

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

Используйте SerialVersionUID в Java для контроля версий классов при сериализации. Решение проблем совместимости при изменении структуры класса.

Time to read: 9

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

Узнайте, как сохранить Singleton при сериализации в Java. Метод readResolve гарантирует единственность экземпляра после десериализации.

Time to read: 8