当前位置: 首页 > 面试题库 >

序列化Java中的多个不同对象

微生俊材
2023-03-14
问题内容

我可能会尝试以困难的方式执行此操作,所以请让我知道是否有更好的解决方案。

我正在用Java开发一个简单的文字游戏,您可以通过GUI选择动作。我有几个班级正在尝试序列化一个是播放器,另一个是NPC。是否有一种简单的方法可以将一个以上的对象(播放器和NPC)序列化到同一文件中?我可以序列化一个对象并将其加载回游戏中。

我会以错误的方式处理吗?有没有更简单的方法来尝试保存游戏状态?

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

谢谢


问题答案:

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


 类似资料:
  • 问题内容: 你好亲爱的同事们, 我有一个Garden类,在其中我可以序列化和反序列化多个Plant类对象。如果想将其分配给mein静态方法中的调用变量,则可以进行序列化,但是不能进行反序列化。 反序列化代码: 我的调用代码: 编辑 我有一个空的Pointer异常 @NilsH的解决方案工作正常,谢谢! 问题答案: 如何序列化整个列表呢?无需序列化列表中的每个对象。 如果那不能解决您的问题,请发布有

  • 序列化对象时,我设置, 将对象附加到序列化文件。例如,我将电子邮件对象序列化到同一个文件中。 当反序列化这些保存的对象时,我想得到所有对象,但它只给出第一个对象。 我发现了一个类似的问题,反序列化java中的许多对象?但是没有,方法。那么,反序列化时如何获取所有对象?

  • 我尝试反序列化json: 我有两个实体: 和 如何使用一个json条目同时反序列化两个实体?以下是使用Jackson ObjectMapper的main摘录: 它解析日期、uuid和数据集,但不能解析具有hmm_subfamily、hmm_evalue和hmm_score值的HmmResult对象:我得到错误:p.getHmmResult():null。(HmmResult hm=ObjMappe

  • 问题内容: 我问了一个先前的问题,关于如何将多个保存文件保存到.ser文件中,建议我使用哈希集,因为它们是可序列化的。我试图编写一段测试代码来序列化哈希集内的每条信息: 但是我在获取代码来编写带有index(i)的对象时遇到了麻烦,因为它说未为type定义该方法。有没有一种方法可以遍历哈希集中的每条信息,还是应该一次序列化整个集合。另一个问题是,如果第一个答案是后者,我将如何将数据反序列化为单独的

  • 问题内容: 可以说我有一个出于某种原因需要处理序列化对象的旧版本的程序。 例如:反序列化时,可能会遇到以下版本之一。 让我们假设可以使用某种巧妙的策略(设置不存在的字段等)将(旧的)对象转换为新的对象,但是: 如何安排我的源代码?编写转换器时,我可能需要在同一源代码树中同时使用这两个版本,但是如何在eclipse中进行处理。 我应该在一个类加载器中进行反序列化吗?如果失败,请尝试使用另一个使用旧版

  • 我正在试验Stanford CoreNLP库,我想序列化主要的StanfordCoreNLP管道对象,尽管它抛出了一个java.io.NotSerializableException。 完整故事:每当我运行我的实现时,将管道注释器和分类器加载到内存中大约需要15秒。最终进程的内存约为600MB(很容易小到可以存储在我的机箱中)。我想在第一次创建管道后保存它,这样我就可以在以后将其读入内存。 然而,