JavaRush /جاوا بلاگ /Random-SD /انٽرفيس - نشان
dupliaka
سطح
Санкт-Петербург

انٽرفيس - نشان

گروپ ۾ شايع ٿيل
مارڪر انٽرفيس هڪ ڊزائين نمونو آهي رن-ٽائم ٽائپ چيڪنگ سان جيڪو توهان کي انٽرفيس ۽ هڪ ڪلاس سان لاڳاپيل ڪرڻ جي اجازت ڏئي ٿو. سمجھڻ لاءِ اھو ضروري ڇو ٿي سگھي ٿو، ھڪڙي مثال تي غور ڪريو سيريلائيبل ڪلاس کي مارڪر سان نشان ھڻڻ. اچو ته فرض ڪريون ته اسان کي ميموري ۾ ڪنهن شئي جي حالت کي محفوظ ڪرڻ جي ضرورت آهي، ۽ پوء اهو پڻ قابل ٿي سگھي ٿو ته اسان جيڪو محفوظ ڪيو آهي ان کي رد ڪري سگھون ٿا. پوء، توهان چئو ٿا، اسان پنهنجي اعتراض کي بٽ جي سيٽ ۾ تبديل ڪري سگهون ٿا. ساڄو. اسان 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"); } }

اعتراض رڪارڊ ڪرڻ

پهرين، اسان سيريلائيبل ڪلاس BigObject جو هڪ اعتراض ٺاهيندا آهيون، پوءِ اسان ان لاءِ ڊيٽا بفر تيار ڪريون ٿا - اها جاءِ جتي اسان سڀ بوز ByteArrayOutputStream رکون ٿا. ان کان پوء اسان اڳ ۾ ئي ذڪر ڪيل ObjectOutputStream تيار ڪريون ٿا ۽ بفر کي ان ڏانهن منتقل ڪريون ٿا، اسان پنهنجو اعتراض اسٽريم ڏانهن لکون ٿا ۽ ان کي بند ڪريون ٿا.

هڪ اعتراض پڙهڻ

اچو ته هڪ لکندڙ بفر تيار ڪريون readBuffer، انپٽ اسٽريم پاس ڪريو، readObject(). اعتراض هاڻي بحال ڪيو ويو آهي. انهي حقيقت جي مهرباني ته `id` فيلڊ هڪ ڪڙي نه هئي، اسان سيريلائيبل ڪلاس کي نشان لڳايو، جيڪو مڪمل طور تي ان جي ڊيٽا تي مشتمل آهي. اسان جي ڪلاس جي اندر تصديق جي ڪم کي شامل ڪرڻ بدران، ٽوڪن اسان کي ڪلاس جي تصديق جي عمل کي آسان ڪرڻ جي اجازت ڏين ٿا.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION