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

Припустимо, наш клас містить посилання на якийсь InputStream. У такому випадку його не можна серіалізувати, чи не так?

— Так. Ти казав, що потоки серіалізувати не можна. А серіалізувати об'єкт, в якого є дані, що не серіалізуються, теж не можна.

— Саме так. А що як клас зберігає дані, які не відіграють значної ролі в його стані, але заважають йому стати класом, що серіалізується? Клас може зберігати багато непотрібного. Можливо, він може викинути ці дані будь-якої миті або вже постійно так чинить.

Для таких випадків розробники Java вигадали спеціальне слово – transient. Його можна написати перед змінною класу, і вона не буде враховуватися під час серіалізації. Її стан не буде ані зберігатися, ані відновлюватися. Наче її зовсім нема. Саме для таких ситуацій, які ми зараз розглянули.

Пам'ятаєш кешування та модифікатор volatileНема правил без винятків.

Ось тобі один приклад такого щастя:

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

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

 transient public InputStream in = System.in; 
}