【问题标题】:Android: Most efficient way to save a list of intAndroid:保存int列表的最有效方法
【发布时间】:2011-05-04 13:09:50
【问题描述】:

我正在尝试创建一个系统来保存我的应用程序中已经玩过的关卡列表。

我一直在使用 Editor 和 SharedPreferences 在手机上存储信息。

但现在我有一个要保存的 int 列表

我一直在尝试用

 DataOutputStream out;

        //Size
        int resultSize = results.size();
        out.writeInt(resultSize);

        //All the levels ID
        for (int idx = 0; idx < resultSize; idx++){
            //l().debug("Lvl ID: "+results.get(idx));
            out.writeInt(results.get(idx));
        }

但是我不知道如何将其存储在共享首选项中。

我也关心大小,这个 ID 列表可能会变得非常大,所以我想优化存储量。(因此是 DataStream)

任何想法

杰森

【问题讨论】:

    标签: android list editor sharedpreferences


    【解决方案1】:

    您可以遍历您的列表并从整数构造一个逗号分隔的字符串。例如。 “1,2,15..etc”,然后只需将此字符串写入 SharedPreferences。当你读回它时,你显然必须对其进行标记。

    【讨论】:

    • 我想到了这个,但我希望有更好的方法(比如我在上面发布的 DataOutputStream)
    【解决方案2】:

    “真正大”到底有多大?考虑到这是一个人类玩过的关卡列表,我要断言它对于智能手机可以处理的东西来说是“小”的。不过,我个人建议将其放入“已完成”级别的 SQLite 表中,以便于查询信息。

    【讨论】:

    • 该列表由人类播放,但由互联网服务器提供。目标是避免用户玩相同的关卡。所以可能有很多级别哈哈\o/
    • 是的,还是很小;请记住,使用 4 字节整数的 256 级列表仍然只有 1kb 的空间;很小。
    【解决方案3】:

    我认为您不需要最有效的方法。这个数据很小,用你知道的。选择简单易懂、易于调试的东西。

    一个平面文件,每个级别的 int 都在一个新行上。没有比这更简单的了。当然,它比最有效的方法更大,但是从损坏的文件中恢复要容易得多,调试起来也容易得多。

    【讨论】:

    • 从损坏的文件中恢复到底有多容易?您只能通过添加一些奇偶校验来从损坏的文件中恢复。而且调试不简单,调试也一样。
    【解决方案4】:

    二进制流是保存整数的最有效方式。如果您有很多数字(兆字节),请结合使用 DataOutputStream 和 ZipOutputStream。

    【讨论】:

      猜你喜欢
      • 2017-01-28
      • 1970-01-01
      • 2017-06-10
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 2017-02-03
      • 2015-03-14
      • 2015-08-03
      相关资源
      最近更新 更多