JavaRush /Java Blog /Random-TK /Interfeýsler - markerler
dupliaka
Dereje
Санкт-Петербург

Interfeýsler - markerler

Toparda çap edildi
Marker interfeýsleri, interfeýsi we synpy birleşdirmäge mümkinçilik berýän iş wagtyny barlamak bilen dizaýn nagşydyr. Munuň näme üçin zerur bolup biljekdigine düşünmek üçin Serializible synpyny marker bilen bellemegiň mysalyna serediň. Bir obýektiň ýagdaýyny ýatda saklamalydygymyzy, soň bolsa halas eden zatlarymyzy açyp biljekdigimizi kabul edeliň. Soň bolsa, obýektimizi bitler toplumyna öwrüp bileris diýýärsiňiz. Dogry. FileInputStream ulanyp, bir faýla ýazmagyň ýönekeý usulyny ulanyp bileris, ýöne bu diňe obýektler az bolsa amatly, ýöne köpüsi bar bolsa näme etmeli? Munuň üçin ajaýyp seriallaşdyrma guraly bar. Ulanylanda esasy düzgün, seriallaşdyrylan obýektiň ähli maglumatlary öz içine almagy we beýleki obýektlere salgylanmazlygydyr. Synagyňyza serediň “Aha, meýdanlar salgylanmaýar we Serializable markerini goýmak gowy.” Ony goýanyňyzda, bellän zatlaryňyzyň ObjectOutputStream-a ýazylyp bilinjekdigini aňladýar. “ObjectOutputStream” synpynda ýazuwObject0 () usuly bar we ol obýektiň ýazylyp bilinjekdigini ýa-da barlagyň ähli tapgyry şowsuz bolsa, NotSerializableException kadasy atylýar we ýok bolsa hemme zat ýada ýazylýar. Geliň, seriallaşdyrjak mysallarymyz bolan BigObject synpyny döredeliň. 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 synpy eýýäm Serializable hökmünde bellendi. Onda bir id meýdançasy we ýoldaş get / set usullary bar. 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"); } }

Bir obýekti ýazga almak

Ilki bilen “BigObject” seriýallaşdyrylýan synpyň obýektini döredýäris, soň bolsa onuň üçin maglumat buferini taýýarlaýarys - ähli ýaýlary “ByteArrayOutputStream” goýjak ýerimiz. Soňra bolsa eýýäm agzalan ObjectOutputStream taýýarlaýarys we buferi oňa geçirýäris. Obýektimizi akymy ýazýarys we ýapýarys.

Obýekt okamak

Geliň, bufer readBuffer, girişStream-i geçiň, readObject () okaň. Obýekt indi dikeldildi. "Id" meýdançasynyň baglanyşyk däldigi sebäpli, maglumatlaryny doly öz içine alýan Serializable synpyny belläp bildik. Tokenler synpymyzyň içinde tassyklama funksiýalaryny goşmagyň ýerine, synpy barlamak işini ýönekeýleşdirmäge mümkinçilik berýär.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION