Marker interfeysləri interfeysi və sinfi əlaqələndirməyə imkan verən iş vaxtı növünün yoxlanılması ilə dizayn nümunəsidir. Bunun nə üçün lazım ola biləcəyini başa düşmək üçün Serializible sinfini markerlə qeyd etmək nümunəsini nəzərdən keçirin. Fərz edək ki, bir obyektin vəziyyətini yaddaşda saxlamalı idik, sonra da saxladığımızı deşifrə edə bildik. Sonra, siz deyirsiniz, biz obyektimizi bitlər dəstinə çevirə bilərik. Sağ. FileInputStream-dən istifadə edərək fayla sadə yazmaq üsulundan istifadə edə bilərik, lakin bu, yalnız bir neçə obyekt olduqda rahatdır, bəs onların çoxluğu varsa necə? Bunun üçün gözəl seriallaşdırma aləti var. Onu istifadə edərkən əsas qayda odur ki, seriallaşdırılan obyekt bütün məlumatları ehtiva etməlidir və digər obyektlərə istinad etməməlidir. Sinifinizə baxın “Aha, sahələrə istinad edilməyib və Seriallaşdırıla bilən marker qoymaq yaxşıdır.” Siz onu qoyduğunuzda, qeyd etdiyiniz obyektlərin ObjectOutputStream-ə yazıla biləcəyi mənasını verəcəkdir. ObjectOutputStream sinfində writeObject0() metodu var və o, obyektin yazıla biləcəyini yoxlayan instanceof yoxlamalarını ehtiva edir və bütün yoxlamalar seriyası uğursuz olarsa, NotSerializableException istisnası atılır və əgər yoxsa, hər şey yaddaşa səliqəli şəkildə yazılır. Nümunələrini seriallaşdıracağımız BigObject sinfi yaradaq
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 sinfi artıq Serializable olaraq qeyd olunub. Bir id sahəsi və onu müşayiət edən alma/set üsulları var. 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