首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ObjectOutputStream建议

ObjectOutputStream建议
EN

Stack Overflow用户
提问于 2012-05-27 00:43:29
回答 2查看 127关注 0票数 0

我的程序的目标是让它在关闭时保存,打开时重新加载。

我有一个驱动程序(它包含所有的图形),我希望它能够创建和保存一个文件。我在互联网上见过很多教程,但他们没有解释的是如何在实际的程序中正确地实现这个系统。

我是否在我的主要方法中创建OutputStrema?我是否需要检查是否已经创建了一个文件,如果没有创建一个文件,如果是这样的话,从它读取吗?我该如何完成所有这一切?我应该有一个退出的WindowListener,这样它才能保存所有的数据吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2012-05-27 00:46:33

是的,WindowListener听起来是个好主意。保存程序状态的一种方法是使用属性。请看上面的教程。我不知道该为你的“图形”推荐什么。请告诉我们更多关于你在这里的意思的细节。

编辑

我是否在我的主要方法中创建OutputStrema?

您的问题是在主要方法中创建OutputStream的问题是询问程序结构,而我们对此一无所知。我的直觉告诉我,我不会在main方法中创建这样的东西,即使JFrame是在那里创建的(或者是在main调用的静态方法中)。OutputStream将在实现WindowListener的类中创建,这可以是它自己的独立类。您希望使主方法尽可能小。

我是否需要检查是否已经创建了一个文件,如果没有创建一个文件,如果是这样的话,从它读取吗?

有可能。这个问题的核心是,一旦创建了存储的信息,您将如何处理。也许你会在程序启动时搜索并阅读它?我不知道,因为这一切都取决于你的需要,一些你必须想清楚的事情。

我该如何完成所有这一切?我应该有一个退出的WindowListener,这样它才能保存所有的数据吗?

如果这是一个Swing应用程序,那么是的,WindowListener将帮助您控制应用程序的关闭。

票数 1
EN

Stack Overflow用户

发布于 2012-05-27 01:52:50

我是否在我的主要方法中创建OutputStrema?

最好是在保存状态的地方创建流。

当我的程序运行时,它将接收保存的数据文件及其ObjectInputStream。我是否将完成这一任务的代码放在我的主要方法中?

听起来是个不错的选择。基本上,在尝试做一些需要这些数据的事情之前,您需要这样做。任何能做到这一点的东西都会起作用(尽管使用静态初始化是个坏主意.)

我是否需要检查是否已经创建了一个文件,如果没有创建一个文件,如果是这样的话,从它读取吗?

这个问题令人费解地编写状态文件并读取它。它们发生在生命周期的不同点,并使用不同的代码来执行任务。

在创建保存文件之前,没有必要检查保存文件是否存在.除非建议重命名现有的保存文件。

相反,如果启动应用程序时不存在保存文件,那么尝试打开该文件的构造函数将抛出一个FileNotFoundException。只需捕获异常并跳过读取保存状态的代码。

..。如果还没有创建文件,这会导致错误吗?

是。A FileNotFoundException;见上文。因此,您的代码必须处理这个问题,或者在尝试打开之前测试该文件是否存在;请参阅File.exists()和相关方法。

我应该有一个退出的WindowListener,这样它才能保存所有的数据吗?

这听起来像是解决方案的一部分。(但程序崩溃或死亡的情况又如何呢?你想在这种情况下拯救国家吗..。还是不?)

有几件事要提防:

  • 许多与GUI相关的对象没有实现Serializable,因此不能使用ObjectOutputStream保存.线程、流、套接字和其他一些东西也不能序列化。
  • 当您使用ObjectOutputStream保存类实例,更改类或它们的名称,然后尝试使用ObjectInputStream重新加载它们时,如果保存的实例与类的新版本不匹配,则可能会遇到问题。如果您必须能够读取序列化状态,那么您就有麻烦了。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10770844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档