"हैलो, अमीगो! आज हम एक और दिलचस्प विषय के बारे में जानेंगे। विशेष रूप से, वस्तुओं को सहेजना और लोड करना (पुनर्निर्माण) करना । मान लीजिए कि हमारे पास कैट क्लास है:"

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

और मान लें कि हम फ़ाइल में सेव करने और लोड करने के लिए एक सुविधाजनक तंत्र जोड़ना चाहते हैं।

हम इसे इस प्रकार कर सकते हैं:

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

    public void save(PrintWriter writer) throws Exception {
        writer.println(name);
        writer.println(age);
        writer.println(weight);
        writer.flush();
    }

    public void load(BufferedReader reader) throws Exception {
        name = reader.readLine();
        age = Integer.parseInt(reader.readLine());
        weight = Integer.parseInt(reader.readLine());
    }
}

"वाह! यह इतना आसान है! हम बस प्रत्येक तर्क के मान लिखते हैं, प्रत्येक पंक्ति पर एक। जब हम फ़ाइल लोड करते हैं, तो हम उन्हें उसी क्रम में पढ़ते हैं। यह सही समाधान है।"

"धन्यवाद, अमीगो। अब आप कक्षाओं के इस समूह के लिए सेव और लोड विधियाँ लिख सकते हैं:"

कोड
class Cat
{
 public String name;
 public int age;
 public int weight;
}
class Dog
{
 public String name;
 public int age;
}
class Human
{
 public Cat cat;
 public Dog dog;
}

आपके पास एक मानव वस्तु है, जिसमें एक कुत्ता और एक बिल्ली हो सकती है।

"मेरे पास एक समाधान है:"

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

    public void save(PrintWriter writer) throws Exception {
        writer.println(name);
        writer.println(age);
        writer.println(weight);
        writer.flush();
    }

    public void load(BufferedReader reader) throws Exception {
        name = reader.readLine();
        age = Integer.parseInt(reader.readLine());
        weight = Integer.parseInt(reader.readLine());
    }
}
कोड
class Dog {
    public String name;
    public int age;

    public void save(PrintWriter writer) throws Exception {
        writer.println(name);
        writer.println(age);
        writer.flush();
    }

    public void load(BufferedReader reader) throws Exception {
        name = reader.readLine();
        age = Integer.parseInt(reader.readLine());
    }
}
कोड
public class Human {
    public Cat cat;
    public Dog dog;

    public void save(PrintWriter writer) throws Exception {
        cat.save(writer);
        dog.save(writer);
    }

    public void load(BufferedReader reader) throws Exception {
        cat.load(reader);
        dog.load(reader);
    }
}

"यह एक बहुत अच्छा उपाय है। लेकिन क्या होगा अगर एक इंसान के पास कुत्ता है लेकिन बिल्ली नहीं है?"

अशक्त चेक कहाँ हैं?

"मैं इसे अभी ठीक कर दूँगा:"

कोड
public class Human {
    public Cat cat;
    public Dog dog;

    public void save(PrintWriter writer) throws Exception {
        if (cat != null)
            cat.save(writer);
        if (dog != null)
            dog.save(writer);
    }

    public void load(BufferedReader reader) throws Exception {
        cat = new Cat();
        cat.load(reader);
        dog = new Dog();
        dog.load(reader);
    }
}

"यह अभी भी बिल्कुल सही नहीं है। आपकी दो त्रुटियाँ हैं:"

1) किसी व्यक्ति के पास बिल्ली या कुत्ता नहीं हो सकता है, लेकिन जब लोड विधि को कॉल किया जाता है तब भी वे बनाए जाएंगे

2) यदि हम केवल एक कुत्ते को बचाते हैं, तो उसका डेटा लोड होने पर बिल्ली द्वारा पढ़ा जाएगा।

"अच्छा, मुझे क्या करना चाहिए?"

"हम वेरिएबल्स को लिखना नहीं छोड़ सकते, अन्यथा हमें पढ़ने के दौरान समस्याएँ होंगी । आपको यह सुनिश्चित करने की आवश्यकता है कि वेरिएबल्स जो सेव ऑपरेशन के दौरान शून्य हैं, लोड ऑपरेशन के दौरान शून्य पर सेट हैं। यहाँ मेरा संस्करण है:"

कोड
public class Human {
    public Cat cat;
    public Dog dog;

    public void save(PrintWriter writer) throws Exception {
        String isCatPresent = cat != null ? "yes" : "no";
        writer.println(isCatPresent);
        writer.flush();

        if (cat != null)
            cat.save(writer);

        String isDogPresent = dog != null ? "yes" : "no";
        writer.println(isDogPresent);
        writer.flush();

        if (dog != null)
            dog.save(writer);
    }

    public void load(BufferedReader reader) throws Exception {

        String isCatPresent = reader.readLine();
        if (isCatPresent.equals("yes")) {
            cat = new Cat();
            cat.load(reader);
        }

        String isDogPresent = reader.readLine();
        if (isDogPresent.equals("yes")) {
            dog = new Dog();
            dog.load(reader);
        }
    }
}

"हाँ, मुझे यह समाधान पसंद है।"

"हाँ, यह अच्छा है।"