我想创建一个java游戏并让它记住一个对象。每当我重新运行游戏时,对象都会重新初始化并丢失我存储的所有数据。有什么方法可以阻止java销毁我的对象并随时引用它,即获取对象的内存地址?
答案 0 :(得分:3)
您必须实现存储游戏状态的功能 当你再次启动它时,应该重新创建这个保存的状态。
作为某种解决方案,您可以使用Serialisation
。
BTW 您可以使用常见的游戏快捷方式来保存和撤退状态:
F5
保存游戏状态F9
还原保存状态此外,您可以查看State GoF pattern
答案 1 :(得分:2)
您可以将对象序列化为文件,然后将其读回。您的对象需要实现Serializable接口。然后你就可以做到这一点:
public class MyData implements Serializable{
int data;
public MyData (int data) {
this.data = data;
}
}
假设我们要保存MyData对象。这是一个简单的测试:
public static void main(String[] args) throws Exception {
MyData data = new MyData(5);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("myobject.ser"));
oos.writeObject(data);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("myobject.ser"));
data = (MyData) ois.readObject();
System.out.println(data.data);
}
请记住,如果要序列化对象,该对象的所有字段都必须实现Serializable接口。此外,您无法在以后编辑该类,因此读取对象将导致异常,因为它不会是同一个对象。
您可以在此处找到有关序列化的更多信息:https://docs.oracle.com/javase/tutorial/jndi/objects/serial.html
答案 2 :(得分:1)
当您关闭应用程序时,操作系统将释放应用程序初始化(已分配)的所有内存。因此,如果要在关闭应用程序后找到对象,则必须对其进行序列化。这意味着对象必须保存为文件中的一个字节,当您的应用程序再次启动时,您可以从文件中将其初始化。阅读https://www.tutorialspoint.com/java/java_serialization.htm
答案 3 :(得分:1)
您可以使用ObjectInputStream和ObjectOuputStream来读取和保存Object的信息。
答案 4 :(得分:0)
当JVM停止时,将释放所有已分配的对象 因此,您必须在应用程序内部处理持久性,以避免在关闭时丢失应用程序的状态。
在具有状态持久性的游戏开发中,我们通常有两种类型的保存:
第一个允许玩家从他的上一次进度中检索一个状态,而不必担心明确保存其方。 自动保存由游戏设计者决定,选择相关的自动保存时间。
第二个允许玩家在他想要的时候保存它的保存。
关于保存游戏信息的方法,您有多种方法可以做到这一点。
以下是3种简单而标准的方法:
如果您希望在应用程序之外提供易于阅读和修改的数据,您应该倾向于使用人类可读的数据语言,例如XML或JSON。
如果您不希望数据具有人类可读性,可以使用the standard java serialization。
如果您需要具有强大的性能,则应使用第三个库 作为fast serialization执行序列化。
使用数据库与在线游戏相关,但对于离线游戏,它通常是一种开销。