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"); } }
GO TO FULL VERSION