"तुम्हाला आठवत असेल की आज आम्ही वस्तू जतन करणे आणि फाइलमधून वाचणे तपासले?"
"होय, आम्ही आत्ताच एका आउटपुट स्ट्रीममध्ये सेव्ह केले आहे, इनपुट स्ट्रीममधून वाचलेले आहे."
"शाबास, अमिगो. तुम्हाला हे तपशील लक्षात येत आहेत हे ऐकून बरे वाटले. तुम्ही कोड पूर्ण करू शकाल का जेणेकरून तो फाइलमध्ये सेव्ह होईल आणि वाचेल?"
"काय पूर्ण करा?! FileInputStream आणि FileOutputStream घोषित करा आणि त्यांना सेव्ह आणि लोड पद्धतींकडे पाठवा. येथे गोंधळात पडण्यासारखे काहीही नाही. अगदी सोपे आहे."
"मी तुमच्यासाठी आनंदी आहे. आता एका नवीन विषयासाठी: क्रमिकरण ."
सीरिअलायझेशन जवळजवळ आम्ही जे केले त्यासारखेच आहे, परंतु जावा मशीनमध्ये बरेच थंड आणि अंगभूत आहे. जावा मशीन त्याच्या वस्तू साठवू आणि लोड करू शकते. हे करण्यासाठी जतन आणि लोड पद्धतींची देखील आवश्यकता नाही: सर्व वस्तू जावा मशीनमध्ये संग्रहित केल्या जातात आणि त्यामध्ये पूर्ण प्रवेश असतो."
आम्ही फक्त ऑब्जेक्ट घेतो आणि प्रवाहात जतन करतो आणि प्रवाहातून वाचतो:
public static void main(String[] args) throws Exception
{
Cat cat = new Cat();
//Save a cat to file
FileOutputStream fileOutput = new FileOutputStream("cat.dat");
ObjectOutputStream outputStream = new ObjectOutputStream(fileOutput);
outputStream.writeObject(cat);
fileOutput.close();
outputStream.close();
//Load a cat from file
FileInputStream fiStream = new FileInputStream("cat.dat");
ObjectInputStream objectStream = new ObjectInputStream(fiStream);
Object object = objectStream.readObject();
fiStream.close();
objectStream.close();
Cat newCat = (Cat)object;
}
"बस एवढेच?"
"नक्कीच. एक खूप मोठी आणि जटिल सीरियलायझेशन यंत्रणा आहे जी आम्हाला प्रवाहात जतन करू देते आणि जवळजवळ कोणत्याही डेटा प्रकाराच्या प्रवाहातून वाचू देते."
"जवळजवळ कोणताही. त्यामुळे कोणताही डेटा प्रकार नाही?"
"होय, वस्तुस्थिती अशी आहे की सर्व ऑब्जेक्ट्समध्ये जतन करण्याची अंतर्निहित क्षमता नसते . काही ऑब्जेक्ट्स त्यांचा सर्व डेटा आंतरिकरित्या संग्रहित करत नाहीत. त्याऐवजी, ते फक्त इतर ऑब्जेक्ट्स आणि/किंवा डेटा स्त्रोतांचा संदर्भ देतात. उदाहरणार्थ, कन्सोल (सिस्टम. मध्ये), एक इनपुट प्रवाह (इनपुटस्ट्रीम), आणि इतर गोष्टी."
म्हणूनच Java चे निर्माते विशेष अनुक्रमे करण्यायोग्य इंटरफेस मार्कर घेऊन आले आहेत . त्याला मार्कर म्हणतात , कारण त्यात कोणताही डेटा आणि पद्धती नाहीत. हे फक्त "टॅग" किंवा "चिन्ह" वर्ग करण्यासाठी वापरले जाते. आमचा वर्ग त्याचा सर्व डेटा आंतरिकरित्या संग्रहित करतो असे आम्हाला वाटत असल्यास, आम्ही त्यास Serializable या अवजारांसह चिन्हांकित करू शकतो .
सीरियलायझेशनसाठी समर्थन असलेले "मांजर" उदाहरण येथे आहे:
class Cat implements Serializable
{
public String name;
public int age;
public int weight;
}
जेव्हा आपण ऑब्जेक्ट सीरिअलायझ (सेव्ह) करण्याचा प्रयत्न करतो, तेव्हा जावा मशीन सीरिअलायझेशनला सपोर्ट करते की नाही ते तपासते: ते सीरिअलायझ करण्यायोग्य इंटरफेस लागू करते का? जर असे झाले तर ते ऑब्जेक्ट वाचवते. जर तसे नसेल, तर ते सिरियलायझेशन अशक्य आहे हे दर्शवण्यासाठी अपवाद टाकते.
येथे तुम्हाला हे समजून घेणे आवश्यक आहे की अनुक्रमे करण्यायोग्य ऑब्जेक्टमध्ये फक्त अनुक्रमित करण्यायोग्य वस्तू असणे आवश्यक आहे.
"ठीक आहे, याचा अर्थ आहे. त्याचे भाग जतन केल्याशिवाय तुम्ही संपूर्ण जतन करू शकत नाही."
"नक्की."
"आणि ints, Strings आणि Arraylists बद्दल काय?"
"ते सर्व सिरियलायझेशनला समर्थन देतात. जावाच्या निर्मात्यांनी हे घडले आहे याची खात्री करण्यासाठी विशेष काळजी घेतली. येथे कोणतीही समस्या असू नये."
शिवाय, ऑब्जेक्टचे क्रमिकीकरण केल्यावर ऑब्जेक्टचा प्रकार जतन केला जातो. आता तुम्ही ऑब्जेक्ट व्हेरिएबलमध्ये कॅट ऑब्जेक्टचा संदर्भ सेव्ह करू शकता. सर्व काही व्यवस्थित आणि डीसीरियलाइज होईल.
"डिसिरियलाइज?"
" डीसीरियलायझेशन ही क्रमवारी उलट करण्याची प्रक्रिया आहे: प्रवाह/फाइलमधून ऑब्जेक्ट वाचणे आणि पुनर्रचना करणे."
"अहो, मग आणखी काही प्रश्न नाहीत."
GO TO FULL VERSION