【发布时间】:2011-02-10 20:41:21
【问题描述】:
我一直在研究在回合之间保存游戏数据的替代方法,想知道是否有人能指出正确的方向。
我有大约 32k 的数据必须在 onPause 期间保存。由于数据量巨大,我排除了偏好。我花了几天时间使用 SQLite,但无法在不到两秒的时间内保存数据(尽管时间肯定没有被浪费)。
我决定在游戏开始时使用数据库来加载常量数据。这肯定会更容易调整游戏中的各种参数和默认值。但这仍然让我寻找写入数据的理想方法。
需要保存的数据基本上是 9 次出现的 A 类和 9 次出现的 B 类。我在 Android 的学习曲线(以及 Java 的细微差别,来自 C++ 背景)和一直在疯狂地搜索。这让我想到了两种可能性 -
1)序列化(ObjectOutputStream)
我认为这将是一个完美的解决方案,但在阅读了有关该主题的其他几篇文章后,我认为在 Android 平台上不强烈推荐它,因为速度和内存分配会引发垃圾收集器的潜在愤怒。
2) DataOutputStream 类
我目前的想法是在两个类中添加 Load 和 Save 函数,并在它们中使用 DataOutputStream 和 DataInputStream 调用来分别写入和读取数据。
类中的数据是基元(主要是字符串和整数)和基元数组,所以没有什么太复杂的东西可以分解。这第二种解决方案看起来不错,可行吗?或者还有其他我不知道的解决方案吗?
【问题讨论】:
-
要考虑的主要考虑因素是写入闪存可能是一个很长的操作,与数据大小无关。即使写入 1 个字节也可能需要相当长的时间。因此,请确保您的解决方案缓冲所有数据并以尽可能少的操作写入数据。
-
感谢您的建议。我已经使用了 DataOutputStream 方法,现在写入数据的时间可以忽略不计(大约 0.1 秒)。不过,我很高兴我对 SQLite 数据库有所兴趣,因为它们肯定也会非常有用:)