Antarmuka panandha minangka pola desain kanthi mriksa jinis run-time sing ngidini sampeyan nggandhengake antarmuka lan kelas. Kanggo mangerteni apa iki bisa uga perlu, nimbang conto menehi tandha kelas Serializible karo panandha. Ayo nganggep yen kita kudu nyimpen kahanan obyek ing memori, banjur uga bisa dekripsi apa sing disimpen. Banjur, sampeyan ngomong, kita bisa ngowahi obyek kita dadi set bit. bener. Kita bisa nggunakake cara prasaja nulis menyang file nggunakake FileInputStream, nanging iki mung trep yen ana sawetara obyek, nanging apa yen ana akeh? Ana alat serialization apik kanggo iki. Aturan utama nalika sampeyan nggunakake iku obyek sing serialized kudu ngemot kabeh data lan ora ngrujuk menyang obyek liyane. Delengen kelas sampeyan "Aha, kolom kasebut ora dirujuk lan apik kanggo nyelehake tandha Serializable." Lan nalika sampeyan sijine iku, iku bakal tegese obyek sing ditandhani bisa ditulis kanggo ObjectOutputStream. Kelas ObjectOutputStream nduweni cara writeObject0 (), lan ngemot instanceof mriksa sing mriksa apa obyek bisa ditulis lan yen kabeh seri saka mriksa gagal, banjur istiméwa NotSerializableException dibuwang, lan yen ora, kabeh wis ditulis rapi ing memori. Ayo nggawe kelas BigObject, conto sing bakal kita serialize.
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; } }
Kelas BigObject wis ditandhani minangka Serializable. Nduwe siji lapangan id lan metode get/set. 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