CodeGym/Java Blog/சீரற்ற/ஜாவாவில் சீரியலைசேஷன் மற்றும் டீரியலைசேஷன் இடையே உள்ள வேற...
John Squirrels
நிலை 41
San Francisco

ஜாவாவில் சீரியலைசேஷன் மற்றும் டீரியலைசேஷன் இடையே உள்ள வேறுபாடு என்ன?

சீரற்ற குழுவில் வெளியிடப்பட்டது
members
வணக்கம்! இன்றைய பாடத்தில், ஜாவாவில் சீரியலைசேஷன் மற்றும் டீரியலைசேஷன் பற்றி பேசுகிறோம். நாம் ஒரு எளிய உதாரணத்துடன் தொடங்குவோம். நீங்கள் ஒரு கணினி விளையாட்டை உருவாக்கியுள்ளீர்கள் என்று வைத்துக்கொள்வோம். நீங்கள் 90 களில் வளர்ந்து, அந்த சகாப்தத்தின் கேம் கன்சோல்களை நினைவில் வைத்திருந்தால், இன்று நாம் சாதாரணமாக எடுத்துக் கொள்ளும் ஏதோ ஒன்று அவற்றில் இல்லை என்பதை நீங்கள் அறிந்திருக்கலாம் - கேம்களைச் சேமிக்கும் மற்றும் ஏற்றும் திறன் :) இல்லையென்றால், கற்பனை செய்து பாருங்கள்! ஜாவாவில் சீரியலைசேஷன் மற்றும் டீரியலைசேஷன் இடையே உள்ள வேறுபாடு என்ன?  - 1 இந்த திறன்கள் இல்லாத ஒரு விளையாட்டு இன்று அழிந்துவிடுமோ என்று நான் பயப்படுகிறேன்! எப்படியும் ஒரு விளையாட்டை "சேமிப்பது" மற்றும் "ஏற்றுவது" என்றால் என்ன? சரி, நாங்கள் சாதாரண அர்த்தத்தைப் புரிந்துகொள்கிறோம்: நாங்கள் விட்ட இடத்திலிருந்து விளையாட்டைத் தொடர விரும்புகிறோம். இதைச் செய்ய, நாங்கள் ஒரு வகையான "செக் பாயிண்ட்" ஐ உருவாக்குகிறோம், அதை நாங்கள் கேமை ஏற்றுவதற்குப் பயன்படுத்துகிறோம். ஆனால் இது ஒரு சாதாரண விளையாட்டை விட ஒரு புரோகிராமருக்கு என்ன அர்த்தம்? பதில் எளிது: நாங்கள். நீங்கள் வியூகத்தில் ஸ்பெயினாக விளையாடுகிறீர்கள் என்று வைத்துக்கொள்வோம். உங்கள் விளையாட்டுக்கு ஒரு மாநிலம் உள்ளது: யாருக்கு எந்தப் பிரதேசங்கள் உள்ளன, யாருக்கு எத்தனை வளங்கள் உள்ளன, யார் யாருடன் கூட்டணியில் உள்ளனர், யார் யாருடன் போரில் ஈடுபட்டுள்ளனர், மற்றும் பல. எதிர்காலத்தில் அதை மீட்டமைத்து விளையாட்டைத் தொடர, இந்தத் தகவலை, எங்கள் நிரலின் நிலையை எப்படியாவது சேமிக்க வேண்டும். சீரியலைசேஷன் மற்றும் டிஸரியலைசேஷன் என்பவை துல்லியமாக இதற்குத்தான் . வரிசையாக்கம் என்பது ஒரு பொருளின் நிலையை பைட்டுகளின் வரிசையில் சேமிக்கும் செயல்முறையாகும். சீரியலைசேஷன்இந்த பைட்டுகளில் இருந்து ஒரு பொருளை மீட்டெடுக்கும் செயல்முறை ஆகும். எந்த ஜாவா பொருளையும் பைட் வரிசையாக மாற்றலாம். நமக்கு அது ஏன் தேவை? நிரல்கள் சொந்தமாக இல்லை என்று நாங்கள் ஒன்றுக்கு மேற்பட்ட முறை கூறியுள்ளோம். பெரும்பாலும், அவை பிற நிரல்களுடன் தொடர்பு கொள்கின்றன, தரவு பரிமாற்றம் போன்றவை. மேலும் பைட் வரிசை ஒரு வசதியான மற்றும் திறமையான வடிவமாகும். எடுத்துக்காட்டாக, நம் 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ஒரு தொகுப்பாக மாற்றுகிறோம். பைட்டுகள் மற்றும் முறையைப் பயன்படுத்தி ஒரு கோப்பில் சேமிக்கவும் 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
நாம் மேலே குறிப்பிட்டுள்ள விதிவிலக்கு இதுதான். மூலம், நாங்கள் முக்கியமான ஒன்றை தவறவிட்டோம். ஸ்டிரிங்ஸ் மற்றும் ப்ரிமிட்டிவ்களை எளிதாக வரிசைப்படுத்தலாம் என்பது அர்த்தமுள்ளதாக இருக்கிறது: ஜாவா இதை செய்ய சில வகையான உள்ளமைக்கப்பட்ட பொறிமுறையைக் கொண்டிருக்கலாம். serializableஆனால் நமது வகுப்பில் முதன்முதலில் இல்லாத புலங்கள் இருந்தால், மாறாக மற்ற பொருள்களைப் பற்றிய குறிப்புகள் இருந்தால் என்ன செய்வது ? TerritoriesInfoஎடுத்துக்காட்டாக, எங்கள் வகுப்பில் வேலை செய்ய தனி , ResourcesInfoமற்றும் DiplomacyInfoவகுப்புகளை உருவாக்குவோம் SavedGame.
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 + '\'' +
               '}';
   }
}
இப்போது ஒரு கேள்வி எழுகிறது: நமது மாற்றப்பட்ட வகுப்பைத் தொடர வேண்டுமானால் இந்த வகுப்புகள் அனைத்தும் இருக்க வேண்டுமா ?SerializableSavedGame
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, அதை அடுத்த பாடத்தில் பேசுவோம். கூடுதலாக, "ஹெட்-ஃபர்ஸ்ட் ஜாவா" புத்தகத்தில் இந்த தலைப்பில் ஒரு அத்தியாயம் உள்ளது. கொஞ்சம் கவனம் செலுத்துங்கள் :)
கருத்துக்கள்
  • பிரபலமானவை
  • புதியவை
  • பழையவை
ஒரு கருத்தைத் தெரிவிக்க நீங்கள் உள்நுழைந்திருக்க வேண்டும்
இந்தப் பக்கத்தில் இதுவரை எந்தக் கருத்தும் வழங்கப்படவில்லை