长话短说:我正在重构我的一个旧 Android 项目。以前,它使用的是序列化,这非常慢,而且从我所读的内容来看,这对于 Android 应用程序来说通常是一个非常糟糕的想法。我正在寻找另一种方法来保存用户特定的数据以及应用程序的只读数据。
双方都会有大量数据,我不确定是否有一种“好”的方式来存储它。基本上,该应用程序是一个小型角色扮演游戏。有许多“地图”表示为瓷砖的 2D 数组。每个 Tile 将具有许多属性,一些简单的原语或枚举,其他附加对象,例如事件,也可能包含各种对象等。仅在 20x20 地图中有 400 个 Tile,就有大量数据要存储。除了存储这些数据之外,它还需要存储大量用户特定的数据,例如访问了哪些 Tiles,成功运行了哪些事件等。
我一直在研究保存这些数据的方法,但我似乎无法解决一些问题。我猜它归结为 XML 或 JSON 与 SQLite。XML 或 JSON 在未来更改方面会更加灵活,这很好,因为我希望数据具有灵活性,即向现有对象添加新属性,在需要时添加新对象等。SQLite 不那么容易延展因为您必须更改架构,也许调整查询和索引等,但我过去并没有真正使用过 SQLite,所以也许有一些功能有助于简化该过程。但是,我还希望快速随机访问数据以避免将所有内容一次加载到内存中,如果可以的话。例如,当从一张地图移动到另一张地图时,我 d 宁愿仅在需要时加载下一张地图,而不是将所有内容都保存在内存中,这是 SQLite 会大放异彩的地方,因为我可以直接查询数据而不是遍历 JSON/XML 文件来查找可能分散的数据,即,我们加载地图,但事件中包含的事件和对象可能不是该地图独有的,并且可能很容易位于文件的其他位置或完全位于另一个文件中。然而,规范化 SQLite 中的数据将意味着大量的表和相当多的对象解构/重建。但是事件中包含的事件和对象可能不是该映射唯一的,并且可能很容易位于文件的其他位置或完全位于另一个文件中。然而,规范化 SQLite 中的数据将意味着大量的表和相当多的对象解构/重建。但是事件中包含的事件和对象可能不是该映射唯一的,并且可能很容易位于文件的其他位置或完全位于另一个文件中。然而,规范化 SQLite 中的数据将意味着大量的表和相当多的对象解构/重建。
写入用户数据只有在用户手动保存游戏时才会发生,所以写入性能不是什么大问题。
我有时倾向于过度分析并沉迷于这样的事情。也许这两种情况都不一定是“错误的”,我担心的是无穷小的事情。也许还有其他我没有考虑过的情况。我使用过 Hibernate,并考虑过使用 ORMLite 之类的东西来处理大量的数据库细节,但这需要大量的改造,可能比我需要为其他选项做的更多。