— Салом, Амиго! Як иловаи хурде ба сериализатсия гуфтан мехостам.
Фарз мекунем, ки класи мо дорои истинод ба ягон InputStream аст, пас онро сериализатсия кардан мумкин нест, ҳамин тавр?
— Бале. Худам гуфтӣ, ки потокҳоро сериализатсия кардан мумкин нест. Ва сериализатсия кардани объекте, ки дар он маълумоти сериализатсияшаванда нест, низ мумкин нест.
— Бале. Маҳз ҳамин тавр. Аммо чӣ мешавад, агар класс маълумотеро нигоҳ дорад, ки дар ҳолати он нақши муҳим надорад, аммо ба ӯ халал мерасонад, ки класс сериализатсияшаванда ҳисоб шавад? Чӣ медонад, ки класс ба худ чӣ гуна маълумоти нолозимро нигоҳ дошта метавонад. Шояд, ки ӯ метавонад ин маълумотҳоро дар ҳама вақти холӣ кунад ё ҳатто ҳамин тавр ҳам мекунад.
Барои чунин ҳолатҳо таҳиягарони Java як калимаи махсусро фикр кардаанд – transient. Инро метавон пеш аз тағйирёбандаи класс навишт ва он дар сериализатсия ба инобат гирифта намешавад. Ҳолати он ҳеҷ нигоҳ дошта намешавад ва барқарор намегардад. Гӯё ки ӯ тамоман нест. Маҳз барои чунин вазъиятҳо, ки мо чанде пеш дида будем.
Кеш кардан ва модификатори volatile-ро дар ёд дорӣ? Қоидаҳо бе истисно вуҷуд надоранд.
Ин як мисоли хурсандибахш барои ту:
Мисоли «гурба» бо тағйирёбандаи барои сериализатсия нонамоён — in:
class Cat implements Serializable
{
public String name;
public int age;
public int weight;
transient public InputStream in = System.in;
}
GO TO FULL VERSION