"आपको याद होगा कि आज हमने वस्तुओं को फाइलों में सहेजने और उन्हें पढ़ने की जांच की?"

"हां, हमने अभी आउटपुट स्ट्रीम में सहेजा है, इनपुट स्ट्रीम से पढ़ा गया है।"

"शाबाश, अमीगो। यह सुनकर अच्छा लगा कि आप इन विवरणों पर ध्यान दे रहे हैं। क्या आप कोड को पूरा करने में सक्षम होंगे ताकि यह एक फाइल को सेव और पढ़ सके?"

"क्या पूरा करें? एक 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;
}

"इतना ही?"

"बिल्कुल सही। एक बहुत बड़ा और जटिल क्रमांकन तंत्र है जो हमें एक स्ट्रीम में सहेजने और लगभग किसी भी डेटा प्रकार की स्ट्रीम से पढ़ने की सुविधा देता है।"

"लगभग कोई भी। तो कोई डेटा प्रकार नहीं?"

"हाँ, तथ्य यह है कि सभी वस्तुओं में सहेजे जाने की अंतर्निहित क्षमता नहीं होती है । कुछ वस्तुएँ अपने सभी डेटा को आंतरिक रूप से संग्रहीत नहीं करती हैं। इसके बजाय, वे केवल अन्य वस्तुओं और/या डेटा स्रोतों का संदर्भ देते हैं। उदाहरण के लिए, कंसोल (System. इन), एक इनपुट स्ट्रीम (इनपुटस्ट्रीम), और अन्य चीजें।"

यही कारण है कि जावा के निर्माता विशेष सीरियल करने योग्य इंटरफ़ेस मार्कर के साथ आए । इसे मार्कर कहा जाता है , क्योंकि इसमें कोई डेटा और विधियाँ नहीं होती हैं। इसका उपयोग केवल "टैग" या "मार्क" कक्षाओं के लिए किया जाता है। अगर हम मानते हैं कि हमारी कक्षा अपने सभी डेटा को आंतरिक रूप से संग्रहीत करती है, तो हम इसे लागू करने योग्य के साथ चिह्नित कर सकते हैं ।

क्रमांकन के समर्थन के साथ यहाँ एक «बिल्ली» उदाहरण दिया गया है:

कोड
class Cat implements Serializable
{
 public String name;
 public int age;
 public int weight;
}

जब हम किसी वस्तु को क्रमबद्ध (सहेजने) करने का प्रयास करते हैं, तो जावा मशीन यह जांचती है कि क्या यह क्रमांकन का समर्थन करता है: क्या यह क्रमांकन योग्य इंटरफ़ेस को लागू करता है? यदि यह करता है, तो यह वस्तु को बचाता है। यदि नहीं, तो यह इंगित करने के लिए अपवाद फेंकता है कि क्रमांकन असंभव है।
यहां आपको यह समझने की जरूरत है कि एक क्रमिक वस्तु में केवल क्रमबद्ध वस्तु ही होनी चाहिए।

"ठीक है, यह समझ में आता है। आप इसके हिस्सों को सहेजे बिना पूरे को नहीं बचा सकते।"

"बिल्कुल।"

"और ints, Strings और ArrayLists के बारे में क्या?"

"वे सभी क्रमांकन का समर्थन करते हैं। जावा के रचनाकारों ने यह सुनिश्चित करने के लिए विशेष ध्यान रखा। यहां कोई समस्या नहीं होनी चाहिए।"

इसके अलावा, ऑब्जेक्ट के क्रमबद्ध होने पर ऑब्जेक्ट का प्रकार सहेजा जाता है। अब आप किसी ऑब्जेक्ट वेरिएबल में कैट ऑब्जेक्ट का संदर्भ सहेज सकते हैं। सब कुछ क्रमानुसार और deserialize ठीक ठीक हो जाएगा।

"डिसेरिएलाइज़ करें?"

" डिसेरिएलाइज़ेशन क्रमांकन को उलटने की प्रक्रिया है: किसी स्ट्रीम/फ़ाइल से किसी ऑब्जेक्ट को पढ़ना और पुनर्निर्माण करना।"

"आह, फिर कोई और सवाल नहीं।"