有什么办法可以阻止java破坏一个对象

时间:2017-03-25 14:41:18

标签: java

我想创建一个java游戏并让它记住一个对象。每当我重新运行游戏时,对象都会重新初始化并丢失我存储的所有数据。有什么方法可以阻止java销毁我的对象并随时引用它,即获取对象的内存地址?

5 个答案:

答案 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执行序列化。

使用数据库与在线游戏相关,但对于离线游戏,它通常是一种开销。

相关问题