JavaRush/Курсы/Java Core/Модификатор transient

Модификатор transient

Открыта

— Привет, Амиго! Хотела тебе порассказывать одно маленькое дополнение к сериализации.

Допустим наш класс содержит ссылку на какой-нибудь InputStream, тогда его нельзя сериализовать, ведь так?

— Да. Ты же сама говорила, что потоки сериализовать нельзя. А сериализовать объект, у которого есть несериализуемые данные – тоже нельзя.

— Да. Именно так. Но что, если класс хранит данные, которые не играют значащей роли в его состоянии, но мешают считаться ему сериализуемым классом? Мало ли что класс может у себя хранить ненужного. Возможно, он может выбросить эти данные в любой момент или даже так и делает постоянно.

Для таких случаев разработчики Java придумали специальное слово – transient. Его можно написать перед переменной класса и она не будет учитываться при сериализации. Ее состояние не будет ни сохраняться, ни восстанавливаться. Как будто и нет ее вовсе. Как раз для таких ситуаций, как мы только что рассмотрели.

Помнишь кеширование и модификатор volatile? Нет правил без исключений.

Вот тебе один примерчик такого счастья:

Пример «кота» с невидимой для сериализации переменной — in:

Код
class Cat implements Serializable {
    public String name;
    public int age;
    public int weight;

 transient public InputStream in = System.in;
}
Комментарии (103)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Alexander Pavlyuchenko
Уровень 13
7 апреля, 07:37
Видеоуроки от Алишева перед этим смотрел, очень помогают все в лекциях JR понять, крайне советую его посмотреть послушать
C0N5P1RACY QA Automation Engineer
9 февраля, 10:04
Боже, какой же это ужасный уровень, и весь квест Идти дальше помогает только надежда, что будет лучше, но с каждым уровнем становится только хуже
Anonymous #3585174
Уровень 33
17 сентября 2025, 12:59
like
Никита QAQA Automation Engineer в ОТТ Триколор
14 мая 2025, 14:24
Информативно, идем дальше)
10 апреля 2025, 16:35
чем дальше, тем смешнее.
{Java_Shark}
Уровень 36
16 декабря 2024, 11:59
++
24 марта 2025, 08:07
++Java_Shark
{Java_Shark}
Уровень 36
16 декабря 2024, 11:58
++
24 марта 2025, 08:07
++Java_Shark
G L
Уровень 38
25 ноября 2024, 08:31
Я так понял это сейчас все устарело и не используется на практике Что используют вместо встроенной сериализации? Современные системы предпочитают использовать другие форматы для сериализации и десериализации данных: 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 Легковесные двоичные форматы, эффективные и компактные.
Anonymous #3477481
Уровень 1
29 октября 2024, 19:43
Как я понял, упоминание volatile чисто для сравнения. Как переменные, помеченные volatile, не кэшируются (сохраняются) в кэш процессора (принудительно записываются в основную память), так и переменные, помеченные transient, не сериализуются (сохраняются) при сериализации. Думаю, это единственная взаимосвязь этих модификаторов.
29 сентября 2024, 21:06
настолько лениво все написано, платишь деньги, шоб потом самому гуглить, вкусно
Nazadain
Уровень 39
11 ноября 2024, 12:32
Да тут вроде нечего добавить особо. Достаточно простая и понятная тема.
24 марта 2025, 08:12
и более того, работа программиста и заключается в том, чтобы гуглить самостоятельно