JavaRush /Java Blogu /Random-AZ /İnterfeyslər - markerlər
dupliaka
Səviyyə
Санкт-Петербург

İnterfeyslər - markerlər

Qrupda dərc edilmişdir
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"); } }

Obyektin qeydə alınması

Əvvəlcə BigObject seriyalı sinif obyektini yaradırıq, sonra onun üçün məlumat buferini hazırlayırıq - bütün yayları ByteArrayOutputStream qoyacağımız yer. Sonra artıq qeyd olunan ObjectOutputStream-i hazırlayırıq və buferi ona ötürürük.Obyektimizi axına yazıb bağlayırıq.

Bir obyektin oxunması

ReadBuffer yazma buferini hazırlayaq, inputStream-i keçirək, readObject() oxuyaq. Obyekt artıq bərpa olunub. `id` sahəsinin keçid olmadığına görə biz onun məlumatlarını tamamilə ehtiva edən Serializable sinfini qeyd edə bildik. Sinifimizə doğrulama funksiyaları əlavə etmək əvəzinə, tokenlər bizə sinifin yoxlanılması prosesini sadələşdirməyə imkan verir.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION