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 文件.
您好,我正在 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 文件.