java - 保存游戏数据 - Java

标签 java save

我用一些对象创建了一个基本游戏。我想让程序的用户能够保存和加载程序的状态。

我研究了多篇文章并阅读了很多重叠的帖子。我对方法的数量以及每种方法的复杂性感到惊讶。

大多数方法都要求我创建要保存的所有对象的框架或骨架,然后逐行加载它们,手动调用每个对象,然后将其转换回其数据类型和类。

是的,我是编程新手。但我不是要施舍。我要求一个简明的解释。

我阅读了下面的文章,探索了输出到 XML 文件的想法。

http://www.mkyong.com/java/how-to-create-xml-file-in-java-dom/

正如我所说,我是编程新手。我应该在学习 XML 的同时学习 Java 吗?

我的问题如下:

A) 编译成功后,我的 IDE 是否知道我有多少个对象、它们的数据类型以及它们属于哪个类?

B) 有没有一种方法可以在不单独指定它们的情况下保存所有对象。

c) 我是否夸大了保存一个简单程序的复杂性?

最佳答案

Should I be learning XML in tandem with Java?

除非您想学习 XML 或认为 XML 是适合您的应用程序的不错选择,否则没有理由这样做。有很多方法可以不用 XML 进行序列化。

Doesn't my IDE, upon succesful compilation, know how many objects I have, their data type, and what class they belong to?

不,它不必。由于分配是在 Java 中动态完成的,因此在某些情况下甚至不可能静态地知道此信息。

Foo[] foos = new Foo[ new Scanner(System.in).nextInt() ];
for(int i = 0; i < foos.length; ++i)
    foos[i] = new Foo();

(创建了多少个Foo?编译器不知道。)

当然,编译器对数据的类型了解很多。

B) Is there a way to save ALL objects without specifying them individually.

也许可以使用 Serializable。基本上,您会将所有程序状态放在一个对象中。当您序列化该单个对象时,其他所有对象都会递归序列化。

class FooState implements Serializable {
    Integer a, b, c; // Integer and String
    String d, e, f;  // also implement Serializable
}

class Foo {
    static FooState allMyState = new FooState();

    public static void main(String[] args) throws IOException {
        try(ObjectOutputStream oos = new ObjectOutputStream(
                new FileOutputStream(new File("myFile.data")))) {
            // no need to specify members individually
            oos.writeObject(allMyState);
        }
    }
}

同样的概念可能适用于其他序列化方案,如 JSON、XML 等。

您需要仔细考虑放入状态对象的内容,因为其中的所有内容都会被保存。

c) Have I overdramitized the complexity of saving a simple program?

不是真的。如果不仅仅是一些值,保存程序状态可能会很复杂。

关于java - 保存游戏数据 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28948315/

相关文章:

java - 如何在没有JSF的情况下使用java cdi获取服务器的url

java - 如何编写扫描仪代码来加载先前保存在 save.txt 中的内容?

c# - WinForm 图表控件 : Change size of chart when saving it to a file

linux - 将/dev/video0 的输出转储到 fifo 文件

java - 我们可以在Java swing客户端中使用Activemq吗?

java - 我怎样才能缩小所有这些 if 语句呢?

java - 我有一种从 String[] 中删除空值的方法,我如何为该函数创建一个方法并稍后调用它? java

java - 使用具有相对路径的 JasperReports

performance - 如果由于某种原因必须停止迭代,将结果保存在 Matlab 中的有效方法是什么?

javascript - 如何向 PDF 添加 JavaScript 按钮以将数据保存到 (png) 文件?