Сериализация нескольких разных объектов в Java

Возможно, я пытаюсь сделать это трудным путем, поэтому дайте мне знать, если есть лучшее решение.

Я делаю простую текстовую игру на Java, в которой вы выбираете свои действия с помощью графического интерфейса. У меня есть пара классов, которые я пытаюсь сериализовать, будучи игроком, а другой - NPC. Есть ли простой способ сериализации более одного объекта (игрока и NPC) в один файл? Я могу сериализовать один объект и загрузить его обратно в игру.

Я поступаю об этом неправильно? Есть ли более простой способ сохранить состояние игры?

Если у меня есть класс, который создает несколько объектов, и я сериализую этот класс, будут ли сериализованные объекты тоже?

Спасибо

2 ответа

Решение

Альтернативный подход к последовательной записи объектов состоит в том, чтобы хранить их в коллекции (например, HashMap), поскольку коллекции могут быть сериализованы. Это может немного облегчить управление при извлечении, особенно если у вас есть много объектов для сериализации / десериализации. Следующий код демонстрирует это:

    String first = "first";
    String second = "second";
    HashMap<String, Object> saved = new HashMap<String, Object>();
    saved.put("A", first);
    saved.put("B", second);

    try {
        FileOutputStream fos = new FileOutputStream("test.obj");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(saved);
        oos.flush();
        oos.close();
        fos.close();


        FileInputStream fis = new FileInputStream("test.obj");
        ObjectInputStream ois = new ObjectInputStream(fis);

        HashMap<String,Object> retreived = (HashMap<String,Object>)ois.readObject();
        fis.close();

        System.out.println(retreived.get("A"));
        System.out.println(retreived.get("B"));
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

Запуск этого должен привести к:

first
second

Просто позвони writeObject() столько раз, сколько нужно разных объектов, и наоборот readObject() то же самое.

Трудно поверить, что вы еще не пробовали это.

Другие вопросы по тегам