保存游戏数据 - Java

Jos*_*son 5 java save

我用几个物体创造了一个基本的游戏.我想让程序的用户能够保存和加载程序的状态.

我已经研究了多篇文章,并阅读了很多过多的帖子.我对这些方法的数量以及每种方法的复杂性感到惊讶.

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

是的,我是编程新手.但我不是要求分发.我要求简明扼要的解释.

我阅读了下面的文章,因为我探讨了输出到XML文件的想法.

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

正如我所说,我是编程新手.我是否应该与Java一起学习XML?

我的问题如下:

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

B)有没有办法保存所有对象而不单独指定它们.

c)我是否过分了保存简单程序的复杂性?

Rad*_*def 5

我是否应该与Java一起学习XML?

除非您想学习XML或认为XML是您的应用程序的一个很好的选择,否则没有理由.有许多方法可以在没有XML的情况下进行序列化

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

不,它不必.由于分配是在Java中动态完成的,因此有些情况甚至无法静态地知道这些信息.

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

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

当然,编译器对数据类型有很多了解.

B)有没有办法保存所有对象而不单独指定它们.

也许使用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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

c)我是否过分了保存简单程序的复杂性?

并不是的.如果不仅仅是几个值,保存程序状态可能很复杂.