来自Xml Data的Java In-Application存储

时间:2015-08-28 17:24:08

标签: java xml storage

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

说我有一堆xml文件存储各种统计数据,武器装甲等,我将这些文件作为列表解析到我的应用程序中;

请注意,此数据永远不会改变,并且实际上是“最终的”,它是游戏将使用的常量数据。

现在我的问题是,您是否可以在应用程序中将这些数据(在游戏运行时使用)存储在您可以轻松访问的类中(在我的示例中为单例)?所以例如像这样的东西(其中列表已被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(这似乎是不明智的,特别是,这个数据检索可能(对于商业应用程序至少)是一个网络操作,即使在我的这只是一个硬盘阅读)。此外,如果还有其他任何问题,它将重复编码。

谢谢你的时间!

2 个答案:

答案 0 :(得分:1)

您应该一次阅读并保存,但不要将其存储为单例。在初始化期间读取WeaponData并存储它的实例。如果您不喜欢这样,欢迎您使用您建议的模式,稍后可能会很尴尬。

如果您在应用程序运行时到达WeaponData可能会更新的位置,您可能需要重新阅读它,但不能永远。

答案 1 :(得分:0)

我认为你的方法会起作用,特别是当你提到数据不会变得足够大而无法记忆时。另一个问题是您必须读取数据的频率。这两个考虑因素之间存在权衡,但听起来小XML大小需要立即将XML解组为对象。

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

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