— Salom, Amigo! Senga serializatsiyaga bir kichik qo'shimcha haqida gaplashmoqchi edim.
Aytaylik, bizning sinfda qandaydir InputStream ga ishora mavjud bo'lsa, uni serializatsiya qilib bo'lmaydi, shundaymi?
— Ha. Sen o'zing aytganding, oqimlarni serializatsiya qilib bo'lmaydi. Va serializatsiya qilinmaydigan ma'lumotlarga ega ob'ektni serializatsiya qilish ham mumkin emas.
— Xuddi shunday. Lekin, agar sinfda uning holatiga ahamiyat bermaydigan, lekin uni serializatsiya qilinadigan sinf deb bo'lmaydigan ma'lumotlar mavjud bo'lsa-chi? Kim biladi, sinf o'zida nima saqlashi mumkin. Ehtimol, u ushbu ma'lumotlarni istalgan vaqtda tashlab yuborishi yoki hatto doimiy ravishda shunday qilishi mumkin.
Bunday holatlar uchun Java ishlab chiquvchilari maxsus so'zni yaratdilar - transient. Uni sinf o'zgaruvchisi oldida yozish mumkin, va u serializatsiya paytida inobatga olinmaydi. Uning holatini saqlash yoki qayta tiklash mumkin bo'lmaydi. Go'yo u hech qachon bo'lmaganday. Biz faqat ko'rib chiqayotganimizdek, bunday vaziyatlar uchun.
Keshlash va volatile modifikatorini eslaysizmi? Hech bir qoidalar istisnolarsiz bo'lmaydi.
Senga bir misolcha: serializatsiya uchun ko'rinmas o'zgaruvchisi — in bo'lgan “mushuk”:
class Cat implements Serializable
{
public String name;
public int age;
public int weight;
transient public InputStream in = System.in;
}
GO TO FULL VERSION