CodeGym /جاوا بلاگ /Random-UR /جاوا میں سیریلائزیشن اور ڈی سیریلائزیشن میں کیا فرق ہے؟
John Squirrels
سطح
San Francisco

جاوا میں سیریلائزیشن اور ڈی سیریلائزیشن میں کیا فرق ہے؟

گروپ میں شائع ہوا۔
ہائے! آج کے سبق میں، ہم جاوا میں سیریلائزیشن اور ڈی سیریلائزیشن کے بارے میں بات کرتے ہیں۔ ہم ایک سادہ مثال سے شروع کریں گے۔ فرض کریں کہ آپ نے ایک کمپیوٹر گیم بنایا ہے۔ اگر آپ 90 کی دہائی میں پلے بڑھے ہیں اور اس دور کے گیم کنسولز کو یاد کرتے ہیں، تو آپ کو شاید معلوم ہوگا کہ ان میں کسی چیز کی کمی تھی جسے ہم آج قدر کی نگاہ سے دیکھتے ہیں — گیمز کو بچانے اور لوڈ کرنے کی صلاحیت :) اگر نہیں، تو تصور کریں! جاوا میں سیریلائزیشن اور ڈی سیریلائزیشن میں کیا فرق ہے؟  - 1 مجھے ڈر ہے کہ آج ان صلاحیتوں کے بغیر کھیل برباد ہو جائے گا! ویسے بھی گیم کو "محفوظ" کرنے اور "لوڈ" کرنے کا کیا مطلب ہے؟ ٹھیک ہے، ہم عام معنی کو سمجھتے ہیں: ہم کھیل کو اسی جگہ سے جاری رکھنا چاہتے ہیں جہاں سے ہم نے چھوڑا تھا۔ ایسا کرنے کے لیے، ہم ایک قسم کا "چیک پوائنٹ" بناتے ہیں، جسے ہم پھر گیم لوڈ کرنے کے لیے استعمال کرتے ہیں۔ لیکن آرام دہ اور پرسکون گیمر کے بجائے پروگرامر کے لئے اس کا کیا مطلب ہے؟ جواب آسان ہے: ہم اپنے پروگرام کی حالت محفوظ کر رہے ہیں ۔ مان لیں کہ آپ Strategium میں اسپین کے طور پر کھیل رہے ہیں۔ آپ کے کھیل کی ایک ریاست ہے: کون کون سے علاقوں کا مالک ہے، کس کے پاس کتنے وسائل ہیں، کون کس کے ساتھ اتحاد میں ہے، کون کس کے ساتھ جنگ ​​میں ہے، وغیرہ۔ ہمیں کسی نہ کسی طرح اس معلومات کو محفوظ کرنا چاہیے، ہمارے پروگرام کی حالت، تاکہ مستقبل میں اسے بحال کیا جا سکے اور گیم کو جاری رکھا جا سکے۔ سیریلائزیشن اور ڈی سیریلائزیشن اسی کے لیے ہے۔ سیریلائزیشن بائٹس کی ترتیب میں کسی چیز کی حالت کو ذخیرہ کرنے کا عمل ہے۔ ڈیسیریلائزیشن ان بائٹس سے کسی چیز کو بحال کرنے کا عمل ہے۔ کسی بھی جاوا آبجیکٹ کو بائٹ کی ترتیب میں تبدیل کیا جا سکتا ہے۔ ہمیں اس کی ضرورت کیوں پڑے گی؟ ہم ایک سے زیادہ بار کہہ چکے ہیں کہ پروگرام خود موجود نہیں ہیں۔ اکثر، وہ دوسرے پروگراموں، ڈیٹا کا تبادلہ، وغیرہ کے ساتھ تعامل کرتے ہیں۔ اور بائٹ کی ترتیب ایک آسان اور موثر شکل ہے۔ مثال کے طور پر، ہم اپنے SavedGameآبجیکٹ کو بائٹس کی ترتیب میں تبدیل کر سکتے ہیں، ان بائٹس کو نیٹ ورک پر دوسرے کمپیوٹر پر بھیج سکتے ہیں، اور پھر دوسرے کمپیوٹر پر ان بائٹس کو جاوا آبجیکٹ میں تبدیل کر سکتے ہیں! مشکل لگتا ہے، ٹھیک ہے؟ اور اس عمل کو نافذ کرنا ایک تکلیف کی طرح لگتا ہے :/ خوشی کی بات ہے کہ ایسا نہیں ہے! :) جاوا میں، Serializableانٹرفیس سیریلائزیشن کے عمل کے لیے ذمہ دار ہے۔ یہ انٹرفیس انتہائی آسان ہے: آپ کو اسے استعمال کرنے کے لیے کسی ایک طریقہ کو لاگو کرنے کی ضرورت نہیں ہے! یہ ہماری گیم سیونگ کلاس کتنی آسان نظر آتی ہے:
import java.io.Serializable;
import java.util.Arrays;

public class SavedGame implements Serializable {

   private static final long serialVersionUID = 1L;

   private String[] territoriesInfo;
   private String[] resourcesInfo;
   private String[] diplomacyInfo;

   public SavedGame(String[] territoriesInfo, String[] resourcesInfo, String[] diplomacyInfo){
       this.territoriesInfo = territoriesInfo;
       this.resourcesInfo = resourcesInfo;
       this.diplomacyInfo = diplomacyInfo;
   }

   public String[] getTerritoriesInfo() {
       return territoriesInfo;
   }

   public void setTerritoriesInfo(String[] territoriesInfo) {
       this.territoriesInfo = territoriesInfo;
   }

   public String[] getResourcesInfo() {
       return resourcesInfo;
   }

   public void setResourcesInfo(String[] resourcesInfo) {
       this.resourcesInfo = resourcesInfo;
   }

   public String[] getDiplomacyInfo() {
       return diplomacyInfo;
   }

   public void setDiplomacyInfo(String[] diplomacyInfo) {
       this.diplomacyInfo = diplomacyInfo;
   }

   @Override
   public String toString() {
       return "SavedGame{" +
               "territoriesInfo=" + Arrays.toString(territoriesInfo) +
               ", resourcesInfo=" + Arrays.toString(resourcesInfo) +
               ", diplomacyInfo=" + Arrays.toString(diplomacyInfo) +
               '}';
   }
}
تینوں صفیں علاقوں، وسائل اور سفارت کاری کے بارے میں معلومات کے لیے ذمہ دار ہیں۔ سیریلائز ایبل انٹرفیس جاوا ورچوئل مشین کو بتاتا ہے: " سب کچھ ٹھیک ہے - اگر ضروری ہو تو، اس کلاس کی اشیاء کو سیریلائز کیا جا سکتا ہے "۔ ایک انٹرفیس کے بغیر ایک انٹرفیس عجیب لگتا ہے :/ یہ کیوں ضروری ہے؟ اس سوال کا جواب اوپر دیکھا جا سکتا ہے: یہ صرف جاوا ورچوئل مشین کو ضروری معلومات فراہم کرتا ہے۔ اپنے پچھلے اسباق میں سے ایک میں، ہم نے مختصراً مارکر انٹرفیس کا ذکر کیا ۔ یہ خاص معلوماتی انٹرفیس ہیں جو ہماری کلاسوں کو اضافی معلومات کے ساتھ نشان زد کرتے ہیں جو مستقبل میں جاوا مشین کے لیے کارآمد ہوں گے۔ ان کے پاس کوئی طریقہ نہیں ہے جس پر آپ عمل درآمد کریں۔ Serializableان انٹرفیس میں سے ایک ہے۔ ایک اور اہم نکتہ: ہمیں اس private static final long serialVersionUIDمتغیر کی ضرورت کیوں ہے جس کی وضاحت ہم نے کلاس میں کی ہے؟ اس کی ضرورت کیوں ہے؟ یہ فیلڈ سیریلائزڈ کلاس کے ورژن کے لیے ایک منفرد شناخت کنندہ پر مشتمل ہے ۔ کوئی بھی کلاس جو Serializableانٹرفیس کو نافذ کرتی ہے اس کا versionشناخت کنندہ ہوتا ہے۔ اس کا حساب کلاس کے مواد کی بنیاد پر کیا جاتا ہے: اس کے فیلڈز، وہ ترتیب جس میں ان کا اعلان کیا گیا ہے، طریقے وغیرہ۔ اگر ہم اپنی کلاس میں فیلڈ کی قسم اور/یا فیلڈز کی تعداد کو تبدیل کرتے ہیں، تو ورژن شناخت کنندہ فوری طور پر بدل جاتا ہے۔ . serialVersionUIDکلاس کو سیریلائز کرنے پر بھی لکھا جاتا ہے۔ جب ہم ڈی سیریلائز کرنے کی کوشش کرتے ہیں، یعنی کسی چیز کو بائٹس کے سیٹ سے بحال کرتے ہیں، تو متعلقہ کا موازنہ ہمارے پروگرام میں کلاس کے لیے serialVersionUIDکی قدر سے کیا جاتا ہے ۔ serialVersionUIDاگر اقدار مماثل نہیں ہیں، تو ایک java.io. InvalidClassException پھینک دیا جائے گا۔ ہم ذیل میں اس کی ایک مثال دیکھیں گے۔ اس سے بچنے کے لیے، ہم صرف اپنی کلاس میں ورژن شناخت کنندہ کو دستی طور پر سیٹ کرتے ہیں۔ ہمارے معاملے میں، یہ صرف 1 کے برابر ہوگا (لیکن آپ اپنی پسند کے کسی دوسرے نمبر کو بدل سکتے ہیں)۔ ٹھیک ہے، اب وقت آگیا ہے کہ ہم اپنے SavedGameاعتراض کو سیریلائز کرنے کی کوشش کریں اور دیکھیں کہ کیا ہوتا ہے!
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class Main {

   public static void main(String[] args) throws IOException {

       // Create our object
       String[] territoryInfo = {"Spain has 6 provinces", "Russia has 10 provinces", "France has 8 provinces"};
       String[] resourcesInfo = {"Spain has 100 gold", "Russia has 80 gold", "France has 90 gold"};
       String[] diplomacyInfo = {"France is at war with Russia, Spain has taken a neutral position"};

       SavedGame savedGame = new SavedGame(territoryInfo, resourcesInfo, diplomacyInfo);

       // Create 2 streams to serialize the object and save it to a file
       FileOutputStream outputStream = new FileOutputStream("C:\\Users\\Username\\Desktop\\save.ser");
       ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);

       // Save the game to a file
       objectOutputStream.writeObject(savedGame);

       // Close the stream and free resources
       objectOutputStream.close();
   }
}
جیسا کہ آپ دیکھ سکتے ہیں، ہم نے 2 سلسلے بنائے ہیں: FileOutputStreamاور ObjectOutputStream. پہلا ایک فائل میں ڈیٹا لکھ سکتا ہے، اور دوسرا اشیاء کو بائٹس میں تبدیل کرتا ہے۔ آپ نے پہلے ہی اسی طرح کی "نیسٹڈ" تعمیرات دیکھی ہیں، مثال کے طور پر new BufferedReader(new InputStreamReader(...))، پچھلے اسباق میں، لہذا ان سے آپ کو خوفزدہ نہیں ہونا چاہیے :) دو اسٹریمز کی ایسی "چین" بنا کر، ہم دونوں کام انجام دیتے ہیں: ہم آبجیکٹ کو SavedGameسیٹ میں تبدیل کرتے ہیں۔ of bytes اور طریقہ استعمال کرتے ہوئے اسے فائل میں محفوظ کریں writeObject()۔ اور، ویسے، ہم نے دیکھا بھی نہیں کہ ہمیں کیا ملا! یہ فائل کو دیکھنے کا وقت ہے! *نوٹ: آپ کو پہلے سے فائل بنانے کی ضرورت نہیں ہے۔ اگر اس نام کی فائل موجود نہیں ہے، تو یہ خود بخود بن جائے گی* اور اس کے مندرجات یہ ہیں!

¬н sr SavedGame [ diplomacyInfot [Ljava/lang/String;[ resourcesInfoq ~ [ territoriesInfoq ~ xpur [Ljava.lang.String;­ТVзй{G xp t pФранция воюет СЃ Россией, Испания заняла позицию нейтралитетаuq ~ t "РЈ Испании 100 золотаt РЈ Р РѕСЃСЃРёРё 80 золотаt !РЈ Франции 90 золотаuq ~ t &РЈ Испании 6 провинцийt %РЈ Р РѕСЃСЃРёРё 10 провинцийt &РЈ Франции 8 провинций
اوہ :( ایسا لگتا ہے کہ ہمارے پروگرام نے کام نہیں کیا :( درحقیقت، اس نے کام کیا ہے۔ آپ کو یاد ہوگا کہ ہم نے فائل میں صرف ایک شے یا ٹیکسٹ نہیں بلکہ بائٹس کا ایک سیٹ بھیجا تھا؟ ٹھیک ہے، یہ وہی ہے جو بائٹس کا سیٹ ایسا لگتا ہے :) یہ ہماری محفوظ کردہ گیم ہے! اگر ہم اپنی اصل چیز کو بحال کرنا چاہتے ہیں، یعنی وہ گیم شروع کرنا اور جاری رکھنا جہاں سے ہم نے چھوڑا تھا، تو ہمیں الٹا عمل کی ضرورت ہے: ڈی سیریلائزیشن۔ یہ ہمارے میں کیسا نظر آئے گا ۔ معاملہ:
import java.io.*;

public class Main {

   public static void main(String[] args) throws IOException, ClassNotFoundException {

       FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\save.ser");
       ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);

       SavedGame savedGame = (SavedGame) objectInputStream.readObject();

       System.out.println(savedGame);
   }
}
اور یہاں نتیجہ ہے!

SavedGame{territoriesInfo=["Spain has 6 provinces, Russia has 10 provinces, France has 8 provinces], resourcesInfo=[Spain has 100 gold, Russia has 80 gold, France has 90 gold], diplomacyInfo=[France is at war with Russia, Spain has taken a neutral position]}
بہترین! ہم پہلے اپنے گیم کی حالت کو فائل میں محفوظ کرنے میں کامیاب ہوئے، اور پھر اسے فائل سے بحال کیا۔ اب ہم وہی کام کرنے کی کوشش کرتے ہیں، لیکن اپنی SavedGameکلاس کے لیے ورژن شناخت کنندہ کے بغیر۔ ہم اپنی دونوں کلاسوں کو دوبارہ نہیں لکھیں گے۔ ان کا کوڈ وہی رہے گا، لیکن ہم کلاس private static final long serialVersionUIDسے ہٹا دیں گے SavedGame۔ سیریلائزیشن کے بعد ہمارا اعتراض یہ ہے:

¬н sr SavedGameі€MіuОm‰ [ diplomacyInfot [Ljava/lang/String;[ resourcesInfoq ~ [ territoriesInfoq ~ xpur [Ljava.lang.String;­ТVзй{G xp t pФранция воюет СЃ Россией, Испания заняла позицию нейтралитетаuq ~ t "РЈ Испании 100 золотаt РЈ Р РѕСЃСЃРёРё 80 золотаt !РЈ Франции 90 золотаuq ~ t &РЈ Испании 6 провинцийt %РЈ Р РѕСЃСЃРёРё 10 провинцийt &РЈ Франции 8 провинций
لیکن دیکھیں کہ جب ہم اسے ڈی سیریلائز کرنے کی کوشش کرتے ہیں تو کیا ہوتا ہے:

InvalidClassException: local class incompatible: stream classdesc serialVersionUID = -196410440475012755, local class serialVersionUID = -6675950253085108747
یہ وہی استثناء ہے جس کا ہم نے اوپر ذکر کیا ہے۔ ویسے، ہم نے ایک اہم چیز کھو دی۔ یہ سمجھ میں آتا ہے کہ Strings اور primitives کو آسانی سے سیریلائز کیا جا سکتا ہے: جاوا کے پاس ایسا کرنے کے لیے شاید کسی قسم کا بلٹ ان میکانزم ہے۔ لیکن کیا ہوگا اگر ہماری serializableکلاس میں ایسی فیلڈز ہوں جو قدیم نہیں ہیں، بلکہ دوسری اشیاء کے حوالے ہیں؟ مثال کے طور پر ، آئیے اپنی کلاس کے ساتھ کام کرنے کے لیے علیحدہ TerritoriesInfoاور کلاسز بنائیں۔ResourcesInfoDiplomacyInfoSavedGame
public class TerritoriesInfo {

   private String info;

   public TerritoriesInfo(String info) {
       this.info = info;
   }

   public String getInfo() {
       return info;
   }

   public void setInfo(String info) {
       this.info = info;
   }

   @Override
   public String toString() {
       return "TerritoriesInfo{" +
               "info='" + info + '\'' +
               '}';
   }
}

public class ResourcesInfo {

   private String info;

   public ResourcesInfo(String info) {
       this.info = info;
   }

   public String getInfo() {
       return info;
   }

   public void setInfo(String info) {
       this.info = info;
   }

   @Override
   public String toString() {
       return "ResourcesInfo{" +
               "info='" + info + '\'' +
               '}';
   }
}

public class DiplomacyInfo {

   private String info;

   public DiplomacyInfo(String info) {
       this.info = info;
   }

   public String getInfo() {
       return info;
   }

   public void setInfo(String info) {
       this.info = info;
   }

   @Override
   public String toString() {
       return "DiplomacyInfo{" +
               "info='" + info + '\'' +
               '}';
   }
}
اور اب ایک سوال اٹھتا ہے: کیا ان تمام کلاسوں کی ضرورت ہے Serializableاگر ہم اپنی تبدیل شدہ SavedGameکلاس کو سیریلائز کرنا چاہتے ہیں؟
import java.io.Serializable;
import java.util.Arrays;

public class SavedGame implements Serializable {

   private TerritoriesInfo territoriesInfo;
   private ResourcesInfo resourcesInfo;
   private DiplomacyInfo diplomacyInfo;

   public SavedGame(TerritoriesInfo territoriesInfo, ResourcesInfo resourcesInfo, DiplomacyInfo diplomacyInfo) {
       this.territoriesInfo = territoriesInfo;
       this.resourcesInfo = resourcesInfo;
       this.diplomacyInfo = diplomacyInfo;
   }

   public TerritoriesInfo getTerritoriesInfo() {
       return territoriesInfo;
   }

   public void setTerritoriesInfo(TerritoriesInfo territoriesInfo) {
       this.territoriesInfo = territoriesInfo;
   }

   public ResourcesInfo getResourcesInfo() {
       return resourcesInfo;
   }

   public void setResourcesInfo(ResourcesInfo resourcesInfo) {
       this.resourcesInfo = resourcesInfo;
   }

   public DiplomacyInfo getDiplomacyInfo() {
       return diplomacyInfo;
   }

   public void setDiplomacyInfo(DiplomacyInfo diplomacyInfo) {
       this.diplomacyInfo = diplomacyInfo;
   }

   @Override
   public String toString() {
       return "SavedGame{" +
               "territoriesInfo=" + territoriesInfo +
               ", resourcesInfo=" + resourcesInfo +
               ", diplomacyInfo=" + diplomacyInfo +
               '}';
   }
}
ٹھیک ہے، چلو اس کی جانچ کرتے ہیں! آئیے ہر چیز کو ویسا ہی چھوڑ دیں اور کسی SavedGameچیز کو سیریلائز کرنے کی کوشش کریں:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class Main {

   public static void main(String[] args) throws IOException {

       // Create our object
       TerritoryInfo territoryInfo = new TerritoryInfo("Spain has 6 provinces, Russia has 10 provinces, France has 8 provinces");
       ResourceInfo resourceInfo = new ResourceInfo("Spain has 100 gold, Russia has 80 gold, France has 90 gold");
       DiplomacyInfo diplomacyInfo =  new DiplomacyInfo("France is at war with Russia, Spain has taken a neutral position");


       SavedGame savedGame = new SavedGame(territoriesInfo, resourcesInfo, diplomacyInfo);

       FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Username\\Desktop\\save.ser");
       ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);

       objectOutputStream.writeObject(savedGame);

       objectOutputStream.close();
   }
}
نتیجہ:

Exception in thread "main" java.io.NotSerializableException: DiplomacyInfo
یہ کام نہیں کیا! بنیادی طور پر، یہ ہمارے سوال کا جواب ہے۔ جب کسی چیز کو سیریلائز کیا جاتا ہے، تو اس کے مثال کے متغیرات کے ذریعہ حوالہ کردہ تمام اشیاء کو سیریلائز کیا جاتا ہے۔ اور اگر وہ اشیاء دیگر اشیاء کا بھی حوالہ دیتے ہیں، تو وہ بھی سیریلائز ہوتے ہیں۔ اور اسی طرح اشتہار لامحدود پر۔ اس سلسلہ میں تمام کلاسز ہونی چاہئیںSerializable ، ورنہ ان کا سلسلہ بندی کرنا ناممکن ہو جائے گا اور ایک استثناء دیا جائے گا۔ ویسے، یہ سڑک کے نیچے مسائل پیدا کر سکتا ہے. ہمیں کیا کرنا چاہیے اگر، مثال کے طور پر، جب ہم سیریلائز کرتے ہیں تو ہمیں کسی کلاس کے حصے کی ضرورت نہیں ہے؟ یا، مثال کے طور پر، اگر TerritoryInfoکلاس کسی تیسرے فریق کی لائبریری کے حصے کے طور پر ہمارے پاس آئے۔ اور مزید فرض کریں کہ یہ نہیں ہے Serializableاور، اس کے مطابق، ہم اسے تبدیل نہیں کر سکتے۔ TerritoryInfoیہ پتہ چلتا ہے کہ ہم اپنی کلاس میں کوئی فیلڈ شامل نہیں کر سکتے SavedGame، کیونکہ ایسا کرنے سے پوری SavedGameکلاس غیر سیریلائز ہو جائے گی! یہ ایک مسئلہ ہے :/ جاوا میں سیریلائزیشن اور ڈی سیریلائزیشن میں کیا فرق ہے؟  - 2جاوا میں، اس قسم کے مسائل transientکلیدی لفظ کے استعمال سے حل کیے جاتے ہیں۔ اگر آپ اس کلیدی لفظ کو اپنی کلاس کے کسی فیلڈ میں شامل کرتے ہیں، تو اس فیلڈ کو سیریلائز نہیں کیا جائے گا۔ آئیے SavedGameکلاس کے مثالی فیلڈ میں سے ایک کو عارضی بنانے کی کوشش کرتے ہیں۔ پھر ہم ایک آبجیکٹ کو سیریلائز اور بحال کریں گے۔
import java.io.Serializable;

public class SavedGame implements Serializable {

   private transient TerritoriesInfo territoriesInfo;
   private ResourcesInfo resourcesInfo;
   private DiplomacyInfo diplomacyInfo;

   public SavedGame(TerritoriesInfo territoriesInfo, ResourcesInfo resourcesInfo, DiplomacyInfo diplomacyInfo) {
       this.territoriesInfo = territoriesInfo;
       this.resourcesInfo = resourcesInfo;
       this.diplomacyInfo = diplomacyInfo;
   }

   // ...getters, setters, toString()
}



import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class Main {

   public static void main(String[] args) throws IOException {

       // Create our object
       TerritoryInfo territoryInfo = new TerritoryInfo("Spain has 6 provinces, Russia has 10 provinces, France has 8 provinces");
       ResourceInfo resourceInfo = new ResourceInfo("Spain has 100 gold, Russia has 80 gold, France has 90 gold");
       DiplomacyInfo diplomacyInfo =  new DiplomacyInfo("France is at war with Russia, Spain has taken a neutral position");


       SavedGame savedGame = new SavedGame(territoriesInfo, resourcesInfo, diplomacyInfo);

       FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\Username\\Desktop\\save.ser");
       ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);

       objectOutputStream.writeObject(savedGame);

       objectOutputStream.close();
   }
}


import java.io.*;

public class Main {

   public static void main(String[] args) throws IOException, ClassNotFoundException {

       FileInputStream fileInputStream = new FileInputStream("C:\\Users\\Username\\Desktop\\save.ser");
       ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);

       SavedGame savedGame = (SavedGame) objectInputStream.readObject();

       System.out.println(savedGame);

       objectInputStream.close();


   }
}
اور یہاں نتیجہ ہے:

SavedGame{territoriesInfo=null, resourcesInfo=ResourcesInfo{info='Spain has 100 gold, Russia has 80 gold, France has 90 gold'}, diplomacyInfo=DiplomacyInfo{info='France is at war with Russia, Spain has taken a neutral position'}}
مزید برآں، ہمیں اپنے سوال کا جواب ملا کہ transientفیلڈ کو کیا قدر تفویض کی جاتی ہے۔ اسے پہلے سے طے شدہ قیمت تفویض کی جاتی ہے۔ اشیاء کے لئے، یہ ہے null. آپ سیریلائزیشن پر یہ بہترین مضمون پڑھ سکتے ہیں جب آپ کے پاس کچھ منٹ باقی ہیں۔ اس میں انٹرفیس کا بھی ذکر ہے Externalizable، جس کے بارے میں ہم اگلے سبق میں بات کریں گے۔ مزید برآں، کتاب "ہیڈ فرسٹ جاوا" میں اس موضوع پر ایک باب ہے۔ اس پر کچھ توجہ دیں :)
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION