Marker interfeyslari interfeys va sinfni bog'lash imkonini beruvchi ish vaqti turini tekshirishga ega dizayn namunasidir. Bu nima uchun zarur bo'lishi mumkinligini tushunish uchun Serializible sinfini marker bilan belgilash misolini ko'rib chiqing. Faraz qilaylik, biz ob'ektning holatini xotirada saqlashimiz kerak edi, keyin esa biz saqlagan narsaning shifrini ochishimiz mumkin. Keyin, siz aytasiz, biz o'z ob'ektimizni bitlar to'plamiga aylantira olamiz. To'g'ri. FileInputStream-dan foydalanib faylga yozishning oddiy usulidan foydalanishimiz mumkin, lekin bu faqat bir nechta ob'ektlar bo'lsa qulay, lekin agar ular ko'p bo'lsa-chi? Buning uchun ajoyib serializatsiya vositasi mavjud. Uni ishlatishda asosiy qoida shundaki, ketma-ketlashtirilayotgan ob'ekt barcha ma'lumotlarni o'z ichiga olishi va boshqa ob'ektlarga murojaat qilmasligi kerak. "Aha, maydonlarga havola qilinmagan va Serializable markerni qo'yish yaxshi" sinfiga qarang. Va siz uni qo'yganingizda, bu siz belgilagan ob'ektlar ObjectOutputStream-ga yozilishi mumkinligini anglatadi. ObjectOutputStream klassida writeObject0() usuli mavjud va u ob'ektni yozish mumkinligini tekshiradigan instanceof tekshiruvlarini o'z ichiga oladi va agar barcha tekshiruvlar ketma-ketligi bajarilmasa, NotSerializableException istisno qilinadi va agar bo'lmasa, hammasi xotiraga aniq yoziladi. Keling, BigObject klassini yarataylik, uning misollarini seriyalashtiramiz
package post1; import java.io.Serializable; public class BigObject implements Serializable { private int id; public void setId(final int id){ this.id = id; } public int getId() { return id; } }
BigObject klassi allaqachon Serializable sifatida belgilangan. Unda bitta identifikator maydoni va unga hamroh bo'lgan olish/to'siq usullari mavjud. package post1; import post1.BigObject; import java.io.*; public class InterfaceMarker { public static void main(String[] args) throws IOException, ClassNotFoundException { int originalId = 12; BigObject objectOriginal = new BigObject(); objectOriginal.setId(originalId); ByteArrayOutputStream writeBuffer = new ByteArrayOutputStream(); ObjectOutputStream outputStream = new ObjectOutputStream(writeBuffer); outputStream.writeObject(objectOriginal); outputStream.close(); byte[] buffer = writeBuffer.toByteArray(); ByteArrayInputStream readBuffer = new ByteArrayInputStream(buffer); ObjectInputStream inputStream = new ObjectInputStream(readBuffer); BigObject objectCopy = (BigObject)inputStream.readObject(); if (objectCopy.getId() == originalId) System.out.println( "originalId equals copiedId"); } }
GO TO FULL VERSION