— Привет, Амиго! Хотела тебе порассказывать одно маленькое дополнение к сериализации.
Допустим наш класс содержит ссылку на какой-нибудь InputStream, тогда его нельзя сериализовать, ведь так?
— Да. Ты же сама говорила, что потоки сериализовать нельзя. А сериализовать объект, у которого есть несериализуемые данные – тоже нельзя.
— Да. Именно так. Но что, если класс хранит данные, которые не играют значащей роли в его состоянии, но мешают считаться ему сериализуемым классом? Мало ли что класс может у себя хранить ненужного. Возможно, он может выбросить эти данные в любой момент или даже так и делает постоянно.
Для таких случаев разработчики Java придумали специальное слово – transient. Его можно написать перед переменной класса и она не будет учитываться при сериализации. Ее состояние не будет ни сохраняться, ни восстанавливаться. Как будто и нет ее вовсе. Как раз для таких ситуаций, как мы только что рассмотрели.
Помнишь кеширование и модификатор volatile? Нет правил без исключений.
Вот тебе один примерчик такого счастья:
Пример «кота» с невидимой для сериализации переменной — in:
class Cat implements Serializable {
public String name;
public int age;
public int weight;
transient public InputStream in = System.in;
}
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Что используют вместо встроенной сериализации? Современные системы предпочитают использовать другие форматы для сериализации и десериализации данных: 1. JSON (JavaScript Object Notation) Простой и широко поддерживаемый формат. Используется для передачи данных между сервисами, особенно в веб-приложениях (REST API). Поддерживается библиотеками вроде Jackson и Gson. 2. Protocol Buffers (Protobuf) Разработан Google для эффективной сериализации данных. Более производительный и компактный, чем JSON или XML. Требует описания структуры данных в .proto файлах. 3. Apache Avro Популярный формат в системах Big Data, таких как Apache Kafka. Отличается встроенной поддержкой схем, что делает его удобным для работы с изменениями структуры данных. 4. XML (Extensible Markup Language) Используется в системах, где требуется человеко-читаемый формат данных. Хотя он менее популярен в современных приложениях, все еще встречается в корпоративных системах. 5. Thrift (от Apache) Разработан Facebook, как аналог Protobuf, с поддержкой нескольких языков программирования. 6. YAML (Yet Another Markup Language) Более читабельный формат, чем JSON, но используется реже из-за меньшей эффективности. 7. CBOR (Concise Binary Object Representation) и MessagePack Легковесные двоичные форматы, эффективные и компактные.