存储/恢复整个应用程序的快照/状态
Posted
技术标签:
【中文标题】存储/恢复整个应用程序的快照/状态【英文标题】:Store/Restore snapshot/state of entire application 【发布时间】:2016-12-18 15:42:16 【问题描述】:我想存储整个应用程序状态,然后在下次启动时恢复它。有没有图书馆可以让我更轻松?或者大家有什么建议吗?
独立应用程序
【问题讨论】:
什么样的应用程序?网络版还是独立版? 独立应用程序 我会在运行时序列化驻留在我的应用程序中的所有对象 @JavaHopper: 这意味着每个对象都是可序列化的 通过带有注释的对象创建您的状态,您可以使用SimpleXML,它的工作原理与 C# 中的 XMLSerializer 非常相似。 【参考方案1】:有一种设计模式可用于您的目的,那就是 Memento 模式。
备忘录模式由三个对象实现:发起者、看守者和备忘录。发起者是一些具有内部状态的对象。看守者将对发起者做一些事情,但希望能够撤消更改。看守人首先向发起人索要纪念品。然后它会执行它要执行的任何操作(或操作序列)。为了回滚到操作之前的状态,它将备忘录对象返回给发起者。纪念品对象本身是一个不透明的对象(看守者不能或不应该更改的对象)。 - ***
您可以阅读 wiki 页面中提供的示例以了解如何在您的代码中使用它。
如果您想将对象的状态保存为文件,并且即使在程序执行结束后仍然可用,您应该在要存储的类中实现 Serializable 接口。
例子:
public class Example implements Serializable
以及实例化该类的位置:
try
Example c = new Example();
FileOutputStream fout = new FileOutputStream("YOURPATH");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(c);
oos.close();
System.out.println("Done");
catch(Exception ex)
ex.printStackTrace();
【讨论】:
@Eric 你可能想避免这种策略。想象一下:有人正在使用您的应用程序。Example
对象在退出时存储到其驱动器中。有一天,您在Example
中发现了一个错误/错误(可能是您拼错了一个单词),因此您编辑Example
以修复该错误。当人们打开应用程序备份时,它会尝试从驱动器加载Example
对象,但会失败,因为修复错误实际上改变了Example
的二进制表示。序列化对象“泄漏实现”,如果实例已经存在于应用程序之外(在您的驱动器上),则阻止您修改类以上是关于存储/恢复整个应用程序的快照/状态的主要内容,如果未能解决你的问题,请参考以下文章