【问题标题】:Serialize multiple different objects single in Java在Java中序列化多个不同的对象
【发布时间】:2016-08-11 08:01:25
【问题描述】:

我可能正在努力做到这一点,所以如果有更好的解决方案,请告诉我。

我正在用 Java 制作一个简单的文本游戏,您可以通过 GUI 选择您的操作。我有几个类,我试图序列化一个是玩家,另一个是 NPC。有没有一种简单的方法可以将多个对象(玩家和 NPC)序列化到同一个文件中?我可以序列化一个对象并将其加载回游戏中。

我是不是走错了路?有没有更简单的方法来尝试保存游戏状态?

如果我有一个创建多个对象的类并且我序列化该类,它创建的对象也会被序列化吗?

谢谢

【问题讨论】:

    标签: java serialization


    【解决方案1】:

    顺序写入对象的另一种方法是将它们存储在集合中(例如 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
    

    【讨论】:

    • 谢谢,这看起来已经奏效了。而不是仅仅将“A”和“B”打印到控制台中,如何将其分配回我可以使用的对象?
    • 我从这里弄明白了:stackoverflow.com/questions/7857935/… 再次感谢您的回答,它让我走上了正轨:)
    【解决方案2】:

    只需调用writeObject() 就可以使用尽可能多的不同对象,反之则调用readObject() 同上。

    很难相信你还没有尝试过。

    【讨论】:

      猜你喜欢
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多