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

ஜாவாவில் சீரியலைசேஷன் மற்றும் டீரியலைசேஷன்

சீரற்ற குழுவில் வெளியிடப்பட்டது
வணக்கம்! இன்றைய பாடத்தில், ஜாவாவில் சீரியலைசேஷன் மற்றும் டீரியலைசேஷன் பற்றி பேசுவோம். நாம் ஒரு எளிய உதாரணத்துடன் தொடங்குவோம். நீங்கள் ஒரு கணினி கேம் டெவலப்பர் என்று கற்பனை செய்து பாருங்கள். நீங்கள் 90 களில் வளர்ந்து, அந்த சகாப்தத்தின் கேம் கன்சோல்களை நினைவில் வைத்திருந்தால், இன்று நாம் சாதாரணமாக எடுத்துக் கொள்ளும் ஏதோ ஒன்று அவற்றில் இல்லை என்பதை நீங்கள் அறிந்திருக்கலாம் - கேம்களைச் சேமிக்கும் மற்றும் ஏற்றும் திறன் :) இல்லையென்றால், கற்பனை செய்து பாருங்கள்!ஜாவாவில் சீரியலைசேஷன் மற்றும் டீரியலைசேஷன் - 1இந்த திறன்கள் இல்லாத ஒரு விளையாட்டு இன்று அழிந்துவிடுமோ என்று நான் பயப்படுகிறேன்! எப்படியிருந்தாலும், விளையாட்டை 'சேமித்தல்' மற்றும் 'ஏற்றுதல்' என்றால் என்ன? சரி, அன்றாட அர்த்தத்தை நாங்கள் புரிந்துகொள்கிறோம்: நாங்கள் விட்ட இடத்திலிருந்து விளையாட்டைத் தொடர விரும்புகிறோம். இதைச் செய்ய, ஒரு குறிப்பிட்ட 'செக் பாயிண்ட்' ஒன்றை உருவாக்குகிறோம், அதை நாங்கள் பின்னர் கேமை ஏற்றுவதற்குப் பயன்படுத்துகிறோம். ஆனால் ஒரு சாதாரண விளையாட்டை விட ஒரு புரோகிராமருக்கு இது என்ன அர்த்தம்? பதில் எளிது: எங்கள் திட்டத்தின் நிலையை நாங்கள் சேமிக்கிறோம். நீங்கள் ஒரு வியூக விளையாட்டில் ஸ்பெயினில் விளையாடுகிறீர்கள் என்று வைத்துக்கொள்வோம். உங்கள் விளையாட்டுக்கு மாநிலம் உள்ளது: ஒவ்வொருவருக்கும் எந்தெந்த பிரதேசங்கள் உள்ளன, ஒவ்வொருவருக்கும் எத்தனை வளங்கள் உள்ளன, என்ன கூட்டணிகள் உள்ளன மற்றும் யாருடன், யார் போரில் ஈடுபட்டுள்ளனர் மற்றும் பல. இந்தத் தகவல், எங்கள் நிரலின் நிலை, தரவை மீட்டெடுக்க மற்றும் விளையாட்டைத் தொடர, எப்படியாவது சேமிக்கப்பட வேண்டும். நடக்கும் போது, ஜாவாவில் வரிசைப்படுத்தல் என்பது ஒரு பொருளின் நிலையை பைட்டுகளின் வரிசையாக சேமிக்கும் செயல்முறையாகும். ஜாவாவில் டிசீரியலைசேஷன் என்பது இந்த பைட்டுகளிலிருந்து ஒரு பொருளை மீட்டெடுக்கும் செயல்முறையாகும். எந்த ஜாவா பொருளையும் பைட் வரிசையாக மாற்றலாம். நமக்கு இது ஏன் தேவை? திட்டங்கள் தானாக இல்லை என்று நாங்கள் பலமுறை கூறியுள்ளோம். பெரும்பாலும், அவர்கள் ஒருவருக்கொருவர் தொடர்புகொள்வது, தரவு பரிமாற்றம் போன்றவை. இதற்கு ஒரு பைட் வடிவம் வசதியானது மற்றும் திறமையானது. எடுத்துக்காட்டாக, நமது SavedGame இன் பொருளை மாற்றலாம்வகுப்பை பைட்டுகளின் வரிசையாக மாற்றவும், இந்த பைட்டுகளை நெட்வொர்க்கில் மற்றொரு கணினிக்கு மாற்றவும், பின்னர் மற்ற கணினியில் இந்த பைட்டுகளை மீண்டும் ஜாவா பொருளாக மாற்றவும்! கடினமாகத் தெரிகிறது, இல்லையா? இதையெல்லாம் செய்வது கடினம் போல் தெரிகிறது: / மகிழ்ச்சி, அப்படி இல்லை! :) ஜாவாவில், வரிசைப்படுத்தக்கூடிய இடைமுகம் வரிசைப்படுத்தல் செயல்முறைக்கு பொறுப்பாகும். இந்த இடைமுகம் மிகவும் எளிமையானது: இதைப் பயன்படுத்த நீங்கள் ஒரு முறையைச் செயல்படுத்த வேண்டியதில்லை! கேம்களைச் சேமிப்பதற்கான எங்கள் வகுப்பு எவ்வளவு எளிமையானது என்பதைப் பாருங்கள்:

import java.io.Serializable;
import java.util.Arrays;

public class SavedGame implements Serializable {

   private static final long serialVersionUID = 1L;

   private String[] territoryInfo;
   private String[] resourceInfo;
   private String[] diplomacyInfo;

   public SavedGame(String[] territoryInfo, String[] resourceInfo, String[] diplomacyInfo){
       this.territoryInfo = territoryInfo;
       this.resourceInfo = resourceInfo;
       this.diplomacyInfo = diplomacyInfo;
   }

   public String[] getTerritoryInfo() {
       return territoryInfo;
   }

   public void setTerritoryInfo(String[] territoryInfo) {
       this.territoryInfo = territoryInfo;
   }

   public String[] getResourceInfo() {
       return resourceInfo;
   }

   public void setResourceInfo(String[] resourceInfo) {
       this.resourceInfo = resourceInfo;
   }

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

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

   @Override
   public String toString() {
       return "SavedGame{" +
               "territoryInfo=" + Arrays.toString(territoryInfo) +
               ", resourceInfo=" + Arrays.toString(resourceInfo) +
               ", diplomacyInfo=" + Arrays.toString(diplomacyInfo) +
               '}';
   }
}
பிரதேசங்கள், வளங்கள் மற்றும் இராஜதந்திரம் பற்றிய தகவல்களுக்கு மூன்று வரிசைகள் பொறுப்பாகும், மேலும் சீரியலைசபிள் இடைமுகம் ஜாவா இயந்திரத்திடம் கூறுகிறது: ' இந்த வகுப்பின் பொருட்களை வரிசைப்படுத்த முடிந்தால் எல்லாம் நன்றாக இருக்கும் '. ஒரு இடைமுகம் இல்லாத இடைமுகம் வித்தியாசமாகத் தெரிகிறது :/ அது ஏன் அவசியம்? அந்த கேள்விக்கான பதில் மேலே கொடுக்கப்பட்டுள்ளது: ஜாவா இயந்திரத்திற்கு தேவையான தகவலை வழங்க மட்டுமே இது தேவைப்படுகிறது. கடந்த பாடத்தில், மார்க்கர் இடைமுகங்களைச் சுருக்கமாகக் குறிப்பிட்டோம். இவை சிறப்புத் தகவல் இடைமுகங்களாகும், அவை எதிர்காலத்தில் ஜாவா இயந்திரத்திற்குப் பயனுள்ளதாக இருக்கும் கூடுதல் தகவலுடன் எங்கள் வகுப்புகளைக் குறிக்கும். நீங்கள் செயல்படுத்த வேண்டிய முறைகள் எதுவும் அவர்களிடம் இல்லை. இதோ Serializable — அத்தகைய ஒரு இடைமுகம். இங்கே மற்றொரு முக்கியமான விஷயம்: நமக்கு ஏன் தேவைநாங்கள் வகுப்பில் வரையறுத்த தனியார் நிலையான இறுதி நீண்ட சீரியல்VersionUID மாறி? இந்த புலத்தில் வரிசைப்படுத்தப்பட்ட வகுப்பின் தனித்துவமான பதிப்பு அடையாளங்காட்டி உள்ளது. வரிசைப்படுத்தக்கூடிய இடைமுகத்தை செயல்படுத்தும் ஒவ்வொரு வகுப்பிலும் பதிப்பு அடையாளங்காட்டி உள்ளது. இது வகுப்பின் உள்ளடக்கத்தின் அடிப்படையில் தீர்மானிக்கப்படுகிறது - புலங்கள் மற்றும் அவற்றின் அறிவிப்பு வரிசை, மற்றும் முறைகள் மற்றும் அவற்றின் அறிவிப்பு வரிசை. ஒரு புல வகை மற்றும்/அல்லது எங்கள் வகுப்பில் உள்ள புலங்களின் எண்ணிக்கையை மாற்றினால், பதிப்பு அடையாளங்காட்டி உடனடியாக மாறும். வகுப்பு வரிசைப்படுத்தப்படும்போது 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[] resourceInfo = {"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, resourceInfo, 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 release resources
       objectOutputStream.close();
   }
}
நீங்கள் பார்க்க முடியும் என, நாங்கள் 2 ஸ்ட்ரீம்களை உருவாக்கியுள்ளோம்: FileOutputStream மற்றும் ObjectOutputStream . முதலாவது கோப்பில் தரவை எவ்வாறு எழுதுவது என்பது தெரியும், இரண்டாவது பொருள்களை பைட்டுகளாக மாற்றுகிறது. நீங்கள் ஏற்கனவே இதே போன்ற உள்ளமைக்கப்பட்ட கட்டுமானங்களைப் பார்த்திருக்கிறீர்கள், உதாரணமாக, புதிய BufferedReader(புதிய InputStreamReader(...)) , முந்தைய பாடங்களில், அவர்கள் உங்களை பயமுறுத்தக்கூடாது :) இந்த இரண்டு ஸ்ட்ரீம்களின் சங்கிலியை உருவாக்குவதன் மூலம், நாங்கள் இரண்டு பணிகளையும் செய்கிறோம்: SavedGame ஆப்ஜெக்டை பைட்டுகளின் வரிசையாக மாற்றி , அதை எழுதுபொருள்() முறையைப் பயன்படுத்தி கோப்பில் சேமிக்கிறோம் . மற்றும், மூலம், நாங்கள் என்ன கிடைத்தது என்று கூட பார்க்கவில்லை! கோப்பைப் பார்க்க வேண்டிய நேரம் இது! *குறிப்பு: கோப்பை முன்கூட்டியே உருவாக்க வேண்டிய அவசியமில்லை. குறிப்பிடப்பட்ட பெயரில் கோப்பு இல்லை என்றால், அது தானாகவே உருவாக்கப்படும்* மேலும் அதன் உள்ளடக்கங்கள் இதோ: ¬н sr SavedGame [ diplomacyInfot [Ljava/lang/String;[ resourceInfoq ~ [ territoryInfoq ~ xpur [Ljava.lang. ஸ்டிரிங் аняла позицию нейтралит етаuq ~ t "РЈ Р˜СЃРїР°РЅРёРё 100 золотаt РЈ РР Р°t !РЈ Франции 90 Р·РѕР »РѕС‚Р°uq ~ t &РЈ Р˜СЃРїР°РЅРёРё 6 РїСЂРѕРІРёРЅС†РРёР№t %РРЕ СРЕ СРЕ ЂРѕРІРёРЅС†РёР№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{territoryInfo=[ஸ்பெயினில் 6 மாகாணங்கள், ரஷ்யாவில் 10 மாகாணங்கள், பிரான்சில் 8 மாகாணங்கள்], resourceInfo=[ஸ்பெயினிடம் 100 தங்கம், ரஷ்யாவிடம் 80 தங்கம், பிரான்சுக்கு 90 தங்கம்], ராஜதந்திர தகவல்=[பிரான்ஸ் ரஷ்யாவுடன் போரில் ஈடுபட்டுள்ளது, ஸ்பெயின் ஒரு நடுநிலை நிலையை எடுத்துள்ளது]} அருமை! முதலில் எங்கள் விளையாட்டின் நிலையை ஒரு கோப்பில் சேமித்து, பின்னர் அதை கோப்பிலிருந்து மீட்டெடுக்க முடிந்தது. இப்போது அதையே செய்ய முயற்சிப்போம், ஆனால் எங்கள் SavedGame வகுப்பிலிருந்து பதிப்பு அடையாளங்காட்டியை அகற்றுவோம். எங்கள் இரு வகுப்புகளையும் மீண்டும் எழுத மாட்டோம். அவர்களின் குறியீடு ஒரே மாதிரியாக இருக்கும். SavedGame வகுப்பில் இருந்து தனிப்பட்ட நிலையான இறுதி நீண்ட சீரியல்VersionUID ஐ அகற்றுவோம் . வரிசைப்படுத்தலுக்குப் பிறகு எங்கள் பொருள் இங்கே: ¬н sr SavedGameі€MіuОm‰ [ diplomacyInfot [Ljava/lang/String;[ resourceInfoq ~ [ territoryInfoq ~ xpur [Ljava.lang.String;¬ТVзй{G xp t pРР° оюет СЃ Россией, Р˜СЃРїР°РЅРёСЏ заняла позицию РЅР ° РЈ Р˜СЃРїР°РЅРёРё 100 золотР°t РЈ Р РѕСЃСЃРёРё 80 золотаt !РЈ ФранцРРёРё 90 РР Р˜СЃРїР°РЅРёРё 6 провинцийt %РЈ ஆர் ரசி Р№ ஆனால் நாம் அதை சீரழிக்க முயற்சிக்கும்போது என்ன நடக்கிறது என்பதைப் பாருங்கள்: InvalidClassException: உள்ளூர் வகுப்பு பொருந்தாது: ஸ்ட்ரீம் classdesc serialVersionUID = -196410440475012755, உள்ளூர் வகுப்பு serialVersionUID = -6675950253085108747 மூலம், நாங்கள் முக்கியமான ஒன்றை தவறவிட்டோம். வெளிப்படையாக, சரங்கள் மற்றும் பழமையானவை எளிதில் வரிசைப்படுத்தப்படுகின்றன: ஜாவா நிச்சயமாக இதற்கு சில உள்ளமைக்கப்பட்ட வழிமுறைகளைக் கொண்டுள்ளது. ஆனால், நமது வரிசைப்படுத்தக்கூடிய வகுப்பில் முதன்முதலில் இல்லாத புலங்கள் இருந்தால், மாறாக மற்ற பொருட்களைக் குறிப்பதாக இருந்தால் என்ன செய்வது? எடுத்துக்காட்டாக, எங்கள் SavedGame வகுப்பில் பணிபுரிய தனியான TerritoryInfo , ResourceInfo மற்றும் DiplomacyInfo வகுப்பை உருவாக்குவோம் .

public class TerritoryInfo {

   private String info;

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

   public String getInfo() {
       return info;
   }

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

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

public class ResourceInfo {

   private String info;

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

   public String getInfo() {
       return info;
   }

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

   @Override
   public String toString() {
       return "ResourceInfo{" +
               "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 + '\'' +
               '}';
   }
}
இப்போது நாம் ஒரு கேள்வியை எதிர்கொள்கிறோம்: எங்கள் SavedGame வகுப்பைத் தொடர வேண்டுமானால், இந்த வகுப்புகள் அனைத்தும் சீரியலாக இருக்க வேண்டுமா?

import java.io.Serializable;
import java.util.Arrays;

public class SavedGame implements Serializable {

   private TerritoryInfo territoryInfo;
   private ResourceInfo resourceInfo;
   private DiplomacyInfo diplomacyInfo;

   public SavedGame(TerritoryInfo territoryInfo, ResourceInfo resourceInfo, DiplomacyInfo diplomacyInfo) {
       this.territoryInfo = territoryInfo;
       this.resourceInfo = resourceInfo;
       this.diplomacyInfo = diplomacyInfo;
   }

   public TerritoryInfo getTerritoryInfo() {
       return territoryInfo;
   }

   public void setTerritoryInfo(TerritoryInfo territoryInfo) {
       this.territoryInfo = territoryInfo;
   }

   public ResourceInfo getResourceInfo() {
       return resourceInfo;
   }

   public void setResourceInfo(ResourceInfo resourceInfo) {
       this.resourceInfo = resourceInfo;
   }

   public DiplomacyInfo getDiplomacyInfo() {
       return diplomacyInfo;
   }

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

   @Override
   public String toString() {
       return "SavedGame{" +
               "territoryInfo=" + territoryInfo +
               ", resourceInfo=" + resourceInfo +
               ", 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(territoryInfo, resourceInfo, diplomacyInfo);

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

       objectOutputStream.writeObject(savedGame);

       objectOutputStream.close();
   }
}
முடிவு: திரி "முக்கிய" java.io இல் விதிவிலக்கு.NotSerializableException: DiplomacyInfo இது வேலை செய்யவில்லை! எனவே, எங்கள் கேள்விக்கான பதில் இங்கே. ஒரு பொருள் வரிசைப்படுத்தப்படும் போது, ​​அதன் நிகழ்வு மாறிகள் மூலம் குறிப்பிடப்படும் அனைத்து பொருள்களும் வரிசைப்படுத்தப்படும். மேலும் அந்த பொருள்கள் மற்ற பொருட்களையும் குறிப்பதாக இருந்தால், அவையும் வரிசைப்படுத்தப்படும். மற்றும் என்றென்றும். இந்தச் சங்கிலியில் உள்ள அனைத்து வகுப்புகளும் வரிசைப்படுத்தக்கூடியதாக இருக்க வேண்டும் , இல்லையெனில் அவற்றைத் தொடர்வது சாத்தியமற்றது மற்றும் விதிவிலக்கு அளிக்கப்படும். மூலம், இது சாலையில் சிக்கல்களை உருவாக்கலாம். எடுத்துக்காட்டாக, தொடரின் போது ஒரு வகுப்பின் ஒரு பகுதி நமக்குத் தேவையில்லை என்றால் நாம் என்ன செய்ய வேண்டும்? அல்லது எங்கள் டெரிட்டரி இன்ஃபோ வகுப்பை 'பரம்பரை மூலம்' நூலகத்தின் ஒரு பகுதியாகப் பெற்றால் என்ன செய்வது? மேலும் அது இல்லை என்று வைத்துக்கொள்வோம்மற்றும், அதன்படி, நாம் அதை மாற்ற முடியாது. எங்கள் SavedGame வகுப்பில் TerritoryInfo புலத்தைச் சேர்க்க முடியாது என்று அர்த்தம் , ஏனெனில் முழு SavedGame வகுப்பும் தொடர முடியாததாகிவிடும்! இது ஒரு சிக்கல்: / ஜாவாவில், இந்த வகையான சிக்கல் தற்காலிக முக்கிய வார்த்தையால் தீர்க்கப்படுகிறது . உங்கள் வகுப்பின் புலத்தில் இந்தத் திறவுச்சொல்லைச் சேர்த்தால், அந்த புலம் வரிசைப்படுத்தப்படாது. எங்கள் SavedGame வகுப்பின் புலங்களில் ஒன்றை தற்காலிகமாக மாற்ற முயற்சிப்போம் , பின்னர் நாங்கள் ஒரு பொருளை வரிசைப்படுத்தி மீட்டமைப்போம். ஜாவாவில் சீரியலைசேஷன் மற்றும் டீரியலைசேஷன் - 2

import java.io.Serializable;

public class SavedGame implements Serializable {

   private transient TerritoryInfo territoryInfo;
   private ResourceInfo resourceInfo;
   private DiplomacyInfo diplomacyInfo;

   public SavedGame(TerritoryInfo territoryInfo, ResourceInfo resourceInfo, DiplomacyInfo diplomacyInfo) {
       this.territoryInfo = territoryInfo;
       this.resourceInfo = resourceInfo;
       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(territoryInfo, resourceInfo, 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{territoryInfo=null, resourceInfo=ResourceInfo{info='ஸ்பெயினிடம் 100 தங்கம், ரஷ்யாவிடம் 80 தங்கம், பிரான்சிடம் 90 தங்கம்'}, diplomacyInfo=DiplomacyInfo{info='பிரான்ஸ் ரஷ்யா, ஸ்பெயினுடன் போரில் ஈடுபட்டுள்ளது. ஒரு நடுநிலை நிலைப்பாட்டை எடுத்துள்ளது'}} என்று சொன்னது, ஒரு நிலையற்ற புலத்திற்கு என்ன மதிப்பு ஒதுக்கப்படும் என்ற கேள்விக்கான பதில் கிடைத்தது . இது இயல்புநிலை மதிப்பு ஒதுக்கப்படுகிறது. பொருள்களுக்கு, இது பூஜ்யமாகும் . இந்த தலைப்பில் ஒரு சிறந்த அத்தியாயத்தை 'ஹெட்-ஃபர்ஸ்ட் ஜாவா' புத்தகத்தில் படிக்கலாம், அதில் கவனம் செலுத்துங்கள் :)
கருத்துக்கள்
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION