مارکر انٹرفیس رن ٹائم ٹائپ چیکنگ کے ساتھ ایک ڈیزائن پیٹرن ہیں جو آپ کو انٹرفیس اور کلاس کو منسلک کرنے کی اجازت دیتا ہے۔ یہ سمجھنے کے لیے کہ یہ کیوں ضروری ہو سکتا ہے، سیریلائزیبل کلاس کو مارکر سے نشان زد کرنے کی ایک مثال پر غور کریں۔ آئیے فرض کریں کہ ہمیں کسی چیز کی حالت کو میموری میں محفوظ کرنے کی ضرورت ہے، اور پھر جو کچھ ہم نے محفوظ کیا ہے اسے ڈکرپٹ کرنے کے قابل بھی ہوں۔ پھر، آپ کہتے ہیں، ہم اپنے آبجیکٹ کو بٹس کے سیٹ میں تبدیل کر سکتے ہیں۔ ٹھیک ہے۔ ہم FileInputStream کا استعمال کرتے ہوئے فائل پر لکھنے کا ایک آسان طریقہ استعمال کر سکتے ہیں، لیکن یہ صرف اس صورت میں آسان ہے جب کچھ چیزیں ہوں، لیکن اگر ان میں سے بہت سی چیزیں ہوں تو کیا ہوگا؟ اس کے لیے ایک شاندار سیریلائزیشن ٹول ہے۔ جب آپ اسے استعمال کرتے ہیں تو بنیادی اصول یہ ہے کہ جس آبجیکٹ کو سیریلائز کیا جا رہا ہے اس میں تمام ڈیٹا ہونا چاہیے اور دیگر اشیاء کا حوالہ نہیں دینا چاہیے۔ اپنی کلاس کو دیکھیں "آہا، فیلڈز کا حوالہ نہیں دیا گیا ہے اور سیریلائز ایبل مارکر لگانا اچھا ہے۔" اور جب آپ اسے ڈالیں گے تو اس کا مطلب یہ ہوگا کہ جن اشیاء کو آپ نے نشان زد کیا ہے انہیں 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 کلاس پہلے ہی سیریلائز کے طور پر نشان زد ہے۔ اس میں ایک آئی ڈی فیلڈ اور اس کے ساتھ حاصل/سیٹ کے طریقے ہیں۔ 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