CodeGym/Java tanfolyam/Java Core/Objektumtömb mentése

Objektumtömb mentése

Elérhető

"Szervusz, Amigo! Ma egy másik érdekes témáról fogunk tanulni. Pontosabban az objektumok mentése és betöltése (rekonstrukciója) . Tegyük fel, hogy van egy Cat osztályunk:"

Kód
class Cat
{
 public String name;
 public int age;
 public int weight;
}

Tegyük fel, hogy szeretnénk hozzáadni egy kényelmes mechanizmust a fájlba való mentéshez és a fájlból való betöltéshez.

Ezt így is megtehetnénk:

Kód
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());
    }
}

"Hűha! Ez olyan egyszerű! Csak minden argumentum értékét írjuk, minden sorba egyet. Amikor betöltjük a fájlt, ugyanabban a sorrendben olvassuk be őket. Ez a tökéletes megoldás."

"Köszönöm, Amigo. Most már megírhatja a mentési és betöltési metódusokat ehhez az osztálycsoporthoz:"

Kód
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;
}

Van egy emberi tárgya, amelyben lehet egy kutya és egy macska.

"Van megoldásom:"

Kód
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());
    }
}
Kód
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());
    }
}
Kód
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);
    }
}

"Ez egy nagyon jó megoldás. De mi történik, ha az embernek van kutyája, de macskája nincs?"

Hol vannak a null ellenőrzések?

"Most megjavítom:"

Kód
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);
    }
}

"Még mindig nincs rendben. Két hibája van:"

1) Előfordulhat, hogy egy személynek nincs macskája vagy kutyája, de a load metódus meghívásakor továbbra is létrejönnek

2) Ha csak egy kutyát mentünk meg, akkor annak adatait a macska beolvassa a betöltéskor.

– Nos, mit tegyek?

" Nem hagyhatjuk ki a változók írását, különben problémáink lesznek az olvasás során . Győződjön meg arról, hogy a mentési művelet során nulla változók nullára vannak állítva a betöltési művelet során. Íme az én verzióm:"

Kód
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);
        }
    }
}

– Igen, tetszik ez a megoldás.

– Igen, szép.

Hozzászólások
  • Népszerű
  • Új
  • Régi
Hozzászólás írásához be kell jelentkeznie
Ennek az oldalnak még nincsenek megjegyzései