مارڪر انٽرفيس هڪ ڊزائين نمونو آهي رن-ٽائم ٽائپ چيڪنگ سان جيڪو توهان کي انٽرفيس ۽ هڪ ڪلاس سان لاڳاپيل ڪرڻ جي اجازت ڏئي ٿو. سمجھڻ لاءِ اھو ضروري ڇو ٿي سگھي ٿو، ھڪڙي مثال تي غور ڪريو سيريلائيبل ڪلاس کي مارڪر سان نشان ھڻڻ. اچو ته فرض ڪريون ته اسان کي ميموري ۾ ڪنهن شئي جي حالت کي محفوظ ڪرڻ جي ضرورت آهي، ۽ پوء اهو پڻ قابل ٿي سگھي ٿو ته اسان جيڪو محفوظ ڪيو آهي ان کي رد ڪري سگھون ٿا. پوء، توهان چئو ٿا، اسان پنهنجي اعتراض کي بٽ جي سيٽ ۾ تبديل ڪري سگهون ٿا. ساڄو. اسان FileInputStream استعمال ڪندي فائل تي لکڻ جو آسان طريقو استعمال ڪري سگهون ٿا، پر اهو صرف ان صورت ۾ آسان آهي جڏهن ڪجھ شيون آهن، پر ڇا جيڪڏهن انهن مان گهڻا آهن؟ ھن لاء ھڪڙو شاندار سيريلائيزيشن اوزار آھي. بنيادي قاعدو جڏهن توهان ان کي استعمال ڪندا آهيو ته اهو اعتراض سيريل ڪيو پيو وڃي سڀني ڊيٽا تي مشتمل هجي ۽ ٻين شين ڏانهن اشارو نه ڪيو وڃي. توهان جي ڪلاس کي ڏسو "ها، فيلڊز حوالي نه ڪيا ويا آهن ۽ اهو سٺو آهي ته Serializable مارڪر وجهي." ۽ جڏھن توھان ان کي وجھو ٿا، ان جو مطلب اھو ٿيندو ته توھان جيڪي شيون نشان لڳايو آھن اھي لکي سگھجن ٿيون ObjectOutputStream. ObjectOutputStream ڪلاس ۾ هڪ writeObject0() طريقو آهي، ۽ ان ۾ چيڪن جا مثال شامل آهن جيڪي چيڪ ڪري سگھن ٿا ته ڇا اعتراض لکي سگهجي ٿو ۽ جيڪڏهن چيڪن جو پورو سلسلو ناڪام ٿئي ٿو، ته پوء هڪ NotSerializableException استثنا اڇلايو ويندو آهي، ۽ جيڪڏهن نه، هر شيء صاف طور تي ميموري ۾ لکيل آهي. اچو ته هڪ BigObject ڪلاس ٺاهيون، جن جا مثال اسين سيريلائيز ڪنداسين.
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 ڪلاس اڳ ۾ ئي سيريلائيبل طور نشان لڳل آهي. ان ۾ ھڪڙو id فيلڊ آھي ۽ گڏوگڏ حاصل / سيٽ طريقا. 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