有没有办法阻止java破坏一个对象
我想创建一个java游戏,让它记住一个对象。每当我重新运行游戏时,对象都会重新初始化,我会丢失所有存储的数据。有没有什么方法可以阻止java破坏我的对象并在我需要的时候引用它,即获取对象的内存地址?您必须实现存储游戏状态的功能。有没有办法阻止java破坏一个对象,java,Java,我想创建一个java游戏,让它记住一个对象。每当我重新运行游戏时,对象都会重新初始化,我会丢失所有存储的数据。有没有什么方法可以阻止java破坏我的对象并在我需要的时候引用它,即获取对象的内存地址?您必须实现存储游戏状态的功能。 再次启动时,应重新创建此保存状态 作为某种解决方案,您可以使用它 顺便说一句您可以使用常见的游戏快捷方式保存和退出状态: F5保存游戏状态 F9还原保存状态 此外,您还可以在关闭应用程序时查看操作系统将释放应用程序初始化(分配)的所有内存。因此,如果要在关闭应用程序
再次启动时,应重新创建此保存状态 作为某种解决方案,您可以使用它 顺便说一句您可以使用常见的游戏快捷方式保存和退出状态:
保存游戏状态F5
还原保存状态F9
此外,您还可以在关闭应用程序时查看操作系统将释放应用程序初始化(分配)的所有内存。因此,如果要在关闭应用程序后查找对象,必须对其进行序列化。这意味着对象必须作为字节保存在文件中,当应用程序再次启动时,可以从文件中初始化它。阅读此处您可以使用ObjectInputStream和ObjectOutStream来读取和保存对象的信息。您可以将对象序列化为文件,然后将其读回。您的对象将需要实现可序列化接口。然后,您可以简单地执行以下操作:
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接口。此外,您以后无法编辑该类,因为读取对象将导致异常,因为它不是同一个对象
您可以在此处找到有关序列化的更多信息:当JVM停止时,所有分配的对象都将被释放。
因此,您必须在应用程序内部处理持久性,以避免在应用程序关闭时丢失其状态 在具有状态持久性的游戏开发中,我们通常有两种类型的保存:
- 自动保存
- 用户保存
关于保存游戏信息的方法,您有多种方法。
以下是3种简单且标准的方法:
- 如果您希望在应用程序之外拥有易于读取和修改的数据,您应该支持使用人类可读的数据语言,如XML或JSON。
- 如果您不希望数据是人类可读的,您可以使用
- 如果您需要强大的性能,那么应该使用第三个库 至于执行序列化
使用数据库与在线游戏相关,但对于离线游戏,这通常是一种开销。这就是各种数据库的发明目的。研究关系、NoSQL、序列化(如XML或JSON)到文件,或解决此问题的任何其他方法。非常感谢。感谢您的快速回答,我使用了序列化!:D