存储包含图像,声音和其他数据等信息的随机访问数据文件

时间:2014-01-25 04:09:58

标签: java json serialization storage random-access

对于这个广泛的问题感到抱歉,但我希望有人能就这样的事情给我一些建议并给我一些想法,因为这对我来说是一个严重的障碍。

那么,让我给你一些背景信息。我正在制作一个带游戏编辑器的游戏引擎。游戏编辑器允许用户使用软件中包含的工具和地图编辑器构建他们的游戏。他们的项目文件是一个文件夹,包含游戏中某些元素的不同子文件夹。例如,地图放在“地图”子文件夹中,每个地图由Json文件表示。 tile指向精灵索引和tileset,tileset也是他们自己的“tilesets”子文件夹中的Json文件,其中包含Base64中的图像数据以及一些与tileset相关的更多信息。

然后将项目文件内置到单个游戏文件中,该文件应该分发给想要玩游戏的其他用户。游戏文件不是独立的可执行文件,它只是一个给游戏引擎可执行文件的文件,然后解释它。

我的问题是构建单个游戏文件以及如何正确地完成它。假设有很多资源要加载,比如图像,声音效果和游戏音乐,我当然无法解析游戏文件,这可能是Json或原始二进制数据从上到下并加载内存中的所有资源因为对于完整的游戏来说,这会占用太多的RAM。

所以我的问题是我该如何处理这个问题?如何在需要时存储资源并将其加载到内存中。请记住,整个游戏项目必须编译成这个单个文件,可以很容易地与其他用户共享。

我正在使用Java和Gson进行Json解析,以防你想知道。如果问题或问题不明确,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

我会将您的内容分发为 SQLite文件。我在移动应用程序中使用相同的用例(人们创建游戏文件并将它们分发给玩家)做了类似的事情,并且效果非常好。

首先,BASE64毕竟是ASCII编码的,所以你可以使用VARCHAR类型存储最多2GB,我认为在你的场景中肯定是足够的。您还可以使用索引列以有效的方式访问数据。

根据您给我们的信息,最佳选择IMHO是为每种类型创建一个表,使用varchar主键通过简单的选择通过返回该行的键值来访问数据。 SQLite在这种场景中非常有效。

您可以考虑的另一点是,作为二进制文件,SQLite可以在二进制文件而不是文本文件中存储数据。这个SO question解释了更多主题。

最后但并非最不重要的是,SQLite非常轻量级,无论是原生还是通过包装器,它都适用于大量平台(包括嵌入式内容)。