繁体   English   中英

在Java中存储数据的更好方法?

[英]Better way to store data in java?

我目前正在制作视频游戏,我想让用户能够将他们的角色保存到新文件中。 我知道如何使用文件io(大多数情况下),但我一直在使用'serialize'来序列化整个对象(包含该字符的所有变量)并将其保存到文件中。 问题是我不断更新对象并对其进行更改,因此当我尝试使用新对象加载旧字符时,它会出错并崩溃。 与级别相同(包含少量2d变量数组的对象)。

必须有更好的方法来实现这一点,以便与未来的版本兼容。 如果有办法,请有人提供一些源代码和/或指向一个很好的教程的链接吗? 感谢所有帮助,谢谢!

使用XML或嵌入式数据库(快速轻量级),如Derby或H2。 您甚至可以使用普通的旧属性文件。

实际上,查看属性文件是否适合您。 只有当它不起作用时,请尝试使用XML或嵌入式数据库方法。

如果你正在寻找java序列化器这里是你的基准https://github.com/eishay/jvm-serializers/wiki/

Apache Avro似乎表现不错。

另一种方法是将值存储在诸如持久存储HSQLDBH2分贝 ,并在启动时加载到内存,并坚持在needed.You也可以使用SQLite的 (驾驶员检查这个

您可以实现Externalizable而不是Serializable,并且在readExternal()writeExternal()方法中,您可以将逻辑放在读/写对象上。 这样您就可以完全控制序列化/反序列化,并且可以非常轻松地进行更改。 或者,您可以使用Gson使用JSON序列化。 我不推荐使用XML,但如果你愿意,你可以查看xstream的相同内容。

如果要以向后兼容的方式扩展对象,即添加字段,而不是删除字段。 确保已根据可序列化的javadoc声明了serialVersionUID。

http://download.oracle.com/javase/1.5.0/docs/api/java/io/Serializable.html

由于您已经在使用序列化,因此可以考虑另外一个选项,您可以实现Externalizable而不是Serializable 用于序列化对象的代码将保持不变。 但是在您的类中,您将通过重写readExternal()writeExternal()准确指定序列化的方式。 例如:

public class MyClass implements Externalizable {
    private int foo;
    private String bar;

    public readExternal(ObjectInput in) {
        foo = in.readInt();
        bar = in.readUTF();
    }

    public writeExternal(ObjectOutput out) {
        out.writeInt(foo);
        out.writeUTF(bar);
    }
}

请务必在阅读和写作时保持顺序相同。 尝试仅添加字段,但是如果您需要删除字段,请留出空白以考虑旧版本。

最终,如果您进行了大量更改,最好切换到LES2建议的属性或XML文件。 它会更加便携和可读。

这个游戏使用java.util.prefs.Preferences来实现跨平台的便利。 由于密钥是单独存储的,因此新添加内容很少会干扰现有条目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM