首页 > 解决方案 > 如何保存和加载包含另一个类列表的类?

问题描述

我有一个包含 Treasure 类列表的类 Inventory。我设计了 Reader 以将 Inventory 读取为 Treasure 列表,但是当我想从我的 main 函数中调用 reader 时,它说 Inventory 与 Treasure 列表不同。现在我不知道该怎么办,是否应该将读取方法更改为仅读取 Inventory,但是 Inventory 再次包含我需要的所有 Treasure 列表。我很不知道该怎么做。

public class Inventory implements SavedGames {
    private ArrayList<Treasure> inventory;
    private static Inventory instance;

    // EFFECTS: constructs an empty player inventory
    private Inventory() {
        this.inventory = new ArrayList<Treasure>();
        inventory.add(new Treasure("Potion", 4));
    }



    private void loadGames() {
        try {
            MainCharacter character = Reader.readCharacter(new File(CHARACTER_FILE));
            Monster monster = Reader.readMonster(new File(MONSTER_FILE));
            List<Treasure> inventory = Reader.readInventory(new File(INVENTORY_FILE));
            this.character = character;
            this.monster = monster;
            this.inventory = inventory;
        } catch (IOException e) {
            System.out.println("Unable to read files, resetting...");
            startApp();
        }
    }





    private static List<Treasure> parseInventory(List<String> fileContent) {
        List<Treasure> inventory = new ArrayList<>();

        for (String line : fileContent) {
            ArrayList<String> lineComponents = splitString(line);
            inventory.add(parseTreasure(lineComponents));
        }

        return inventory;
    }

    private static Treasure parseTreasure(List<String> components) {

        String description = components.get(0);
        int amount = Integer.parseInt(components.get(1));
        return new Treasure(description, amount);
    }
}

标签: java

解决方案


序列化是一种将对象的状态转换为字节流的机制。反序列化是使用字节流在内存中重新创建实际 Java 对象的逆过程。该机制用于持久化对象。创建的字节流与平台无关。因此,在一个平台上序列化的对象可以在不同平台上反序列化。

为了使 Java 对象可序列化,我们实现了 java.io.Serializable 接口。ObjectOutputStream 类包含用于序列化对象的 writeObject() 方法。

public final void writeObject(Object obj)
                       throws IOException

ObjectInputStream 类包含用于反序列化对象的 readObject() 方法。

public final Object readObject()
                  throws IOException,
               ClassNotFoundException

推荐阅读