Ответ
Сериализация — это процесс преобразования объекта в последовательность байтов для хранения или передачи. Обратный процесс — десериализация.
Основные сценарии использования:
- Сохранение состояния: Запись объекта в файл или базу данных.
- Сетевое взаимодействие: Передача объектов между приложениями (RPC, REST API, сообщения).
- Кэширование: Хранение объектов в сериализованном виде (например, в Redis).
- Распределенные системы: Обмен данными между процессами или машинами.
Пример сериализации в Java с Serializable:
import java.io.*;
class User implements Serializable {
// Контроль версий для совместимости
private static final long serialVersionUID = 1L;
private String name;
private transient String password; // transient — не сериализуется
public User(String name, String password) {
this.name = name;
this.password = password;
}
@Override
public String toString() {
return "User{name='" + name + "', password='" + password + "'}";
}
}
public class SerializationDemo {
public static void main(String[] args) throws IOException, ClassNotFoundException {
User original = new User("Alice", "secret123");
// Сериализация в файл
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("user.dat"))) {
oos.writeObject(original);
}
// Десериализация из файла
try (ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("user.dat"))) {
User restored = (User) ois.readObject();
System.out.println(restored);
// User{name='Alice', password='null'} (password был transient)
}
}
}
Важные аспекты:
Serializable— маркерный интерфейс в Java.transient— исключает поле из сериализации.serialVersionUID— обеспечивает совместимость версий класса.- Альтернативы: JSON (Jackson, Gson), XML, Protocol Buffers — более гибкие и языково-независимые форматы.