Java 来自 Xml 数据的应用程序内存储

Java In-Application Storage from Xml Data

您好,我正在 Java 开发一款游戏用于学习目的,我有一个关于应用内数据处理的问题

假设我有一堆 xml 文件存储各种统计信息,武器盔甲等,我将这些文件作为列表解析到我的应用程序中;

请注意,此数据永远不会改变,实际上是 "final",它是游戏将使用的常量数据。

现在我的问题是,您是否会将此数据(在游戏 运行 期间使用)存储在您可以访问的应用程序中的 class(在我的示例中为单例)中容易地?因此,例如这样的事情(XML 解析器已在其他地方读取列表)

public class WeaponData {

   private List<Weapon> weaponData;

   public static final WeaponData instance = new WeaponData(parseXml("weapons"));


   private WeaponData(List<Weapon> data) {
       weaponData = data;
   }

   public static WeaponData getInstance() {
       return instance;
   }

   public List<Weapon> getWeaponData() {
       return weaponData;
   }
}

并允许我将数据与

一起使用
WeaponData.getInstance().getWeaponData();

如果是这样,这是解决问题的方法,还是有更好的方法?

或者,我能想到的唯一选择是在需要时继续阅读 XML(这似乎不明智,特别是,这种数据检索可能(至少对于商业应用程序)是一个网络操作,即使在我的情况下它只是一个硬盘读取)。另外,如果还有其他内容,它将重复代码。

感谢您的宝贵时间!

你应该读一遍并保存,但不要将它存储为单例。在初始化期间读取 WeaponData 并存储它的一个实例。如果您不喜欢,欢迎使用您建议的模式,只是以后可能会很尴尬。

如果您在应用 运行 时到达可能更新 WeaponData 的地方,您可能想重新阅读它,但不是每次。

我认为您的方法会奏效,尤其是当您提到数据不会变得足够大以至于占用内存时。另一个问题是您必须读取数据的频率。这两个考虑因素之间存在权衡,但听起来小 XML 大小保证立即将 XML 解组为对象。

为了完整起见,您应该使用 JAX-B 从您的 XML 模式生成 Java 类,而不是滚动您自己的解析器。

如果您担心 XML 的数据可能会发生变化,您可以考虑使用 WatchService API 检测变化并重新解析 XML 文件.