是否可以在没有外部文件的情况下在 Java 中保存进度?

Posted

技术标签:

【中文标题】是否可以在没有外部文件的情况下在 Java 中保存进度?【英文标题】:is it possible to save progress in Java without external files? 【发布时间】:2016-10-07 16:13:20 【问题描述】:

我正在制作一个需要保存进度的 java 游戏。但我不想让外部文件保存进度(一些游戏喜欢我的世界有一个存储文件的“保存”目录)。所以基本上我希望它存储一些可以在用户退出并再次返回时检索的数据。比如说,一个名为 num 的 int。所以当用户 'X's out 然后重新开始时,我希望仍然拥有 int number。提前致谢。

【问题讨论】:

你需要保持你的状态,无论是文件还是数据库 您可以使用 Windows 注册表来保存有关游戏状态的相同值 您可以使用首选项 API。这显然会将首选项保存在磁盘上的某个地方,但您不必关心它。 docs.oracle.com/javase/7/docs/technotes/guides/preferences 要持久化数据,您需要将其从 RAM 中取出,您可以将其发送到本地磁盘(作为文件、数据库等)或将其发送到远程机器(它可以将其存储在自己的 RAM 或磁盘等中)。这是你的两个选择。如果您排除本地磁盘,那么远程计算机是您唯一的选择。 @samizahwan 这在理论上是有效的,但它破坏了 Java 的随处运行特性。此外,注册表作为文件存储在磁盘上的特定系统文件夹中。 【参考方案1】:

您不能像在 Java 中所说的那样存储数据;您必须使用外部文件。但是,隐藏所述文件相当容易。您可以将文件保存在appdata下或用户目录下,可以通过System.getProperty("user.home")检索。我通常也以“.”开头我的游戏目录名称。 (如C:/.../.minecraft/)。还有各种存储该数据的方法。我个人制作了自己的 NBT(命名二进制标签)系统,但我建议从配置文件中的 name = value 系统的简单行开始。

【讨论】:

好的,谢谢。我会把它像 minecraft 一样存储在 appdata 中。【参考方案2】:

您所问的实际上是不可能的。

为了让您的应用程序中的任何数据能够持久保存,需要将其存储在某个地方。当您运行游戏时,它会存储在系统内存中,但是一旦游戏关闭,该内存将由操作系统重新分配,以便其他程序使用。

如果您想在会话之间保留数据,那么您必须在某处写入文件。要快速保存和检索对象,请查看 Serializable 接口 (http://www.javapractices.com/topic/TopicAction.do?Id=57)。

【讨论】:

【参考方案3】:

除了已经给出的答案/cmets,我们应该问你的目标是什么。

因为也许您的目标是,您不希望用户能够操纵该整数?

如果是这种情况,那么您应该将整数存储在您的服务器上。

【讨论】:

【参考方案4】:

大概您可以将持久状态存储在“云”中。无论如何,这很可能会将其保存到某个磁盘上。但至少这样它不在本地磁盘上。

【讨论】:

以上是关于是否可以在没有外部文件的情况下在 Java 中保存进度?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不引用外部 CSS 文件的情况下在 WordPress PHP 文件中创建内联 CSS?

在没有 installp 的情况下在 AIX 中配置 JRE

如何在没有 FilePicker 的情况下在固定位置保存和加载 InkCanvas gif 文件

如何在没有 iFrame 的情况下在另一个页面内显示外部网站? [关闭]

如何在没有中间目录的情况下在图库中编写视频?

如何在没有外部库的情况下在 React 中播放/暂停视频?