您好我正在开发一个用于学习目的的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(这似乎是不明智的,特别是,这个数据检索可能(对于商业应用程序至少)是一个网络操作,即使在我的这只是一个硬盘阅读)。此外,如果还有其他任何问题,它将重复编码。
谢谢你的时间!
答案 0 :(得分:1)
您应该一次阅读并保存,但不要将其存储为单例。在初始化期间读取WeaponData并存储它的实例。如果您不喜欢这样,欢迎您使用您建议的模式,稍后可能会很尴尬。
如果您在应用程序运行时到达WeaponData可能会更新的位置,您可能需要重新阅读它,但不能永远。
答案 1 :(得分:0)
我认为你的方法会起作用,特别是当你提到数据不会变得足够大而无法记忆时。另一个问题是您必须读取数据的频率。这两个考虑因素之间存在权衡,但听起来小XML大小需要立即将XML解组为对象。
为了完整起见,您应该使用JAX-B从XML模式生成Java类,而不是滚动自己的解析器。
如果您担心XML的数据可能会发生变化,您可以考虑使用WatchService
API来检测更改并重新解析XML文件。