【问题标题】:Storing a data - Benefit and cons of each storage types存储数据 - 每种存储类型的优缺点
【发布时间】:2018-06-01 15:03:58
【问题描述】:

我有这样的数据。这可以是也可以不是数组。仅供参考。

ArrayName = Array1, Array2, Array3

Array1 = abc, cde, fgh

Array2 = abc, cde

Array3 = abc、cde、fgh、ijk、lmn

那么,存储此类数据的最佳方法是什么。

如果我愿意

  1. 添加或删除 Array1 和里面的所有东西
  2. 在 Array2 中添加或删除项目(例如添加 fgh 或删除 cde)

我发现的方法:

  1. SharedPreference Android Shared preferences example
  2. 数组
  3. SQLite Android SQLite Example
  4. 文本文件

请分享您选择该方法的利弊。 如果有更好的方法来存储此类数据,也请分享。

如果您发现更好的链接或示例供其他人参考,请编辑此内容。

【问题讨论】:

  • ArrayName = Array1, Array2, Array3 这个数组是数组数组吗?您想永久保存它们吗?我有疑问,因为您的选项 2. 是数组
  • @MishaAkopov 是的,它们是数组的数组。是的,要永久保存。您也可以将 2 和 4 组合在一起。

标签: android


【解决方案1】:

以下是每种解决方案的优缺点:

1) SharedPreference

您在此处保存简单的键值对。所以很难在 SharedPreference 中保存数组和复杂的结构。因此,该解决方案不适用于数组和数组数组。实现您想要的目标将是极其困难的(但并非不可能)。

2) 数组

绝对不是!它是内存存储,因此当您关闭应用程序或进程死亡时,您将丢失所有数据

3) SqlLite

我会添加到其他 Android 数据库,例如 Realm。 很好的解决方案。它是用于收集数据的结构化存储。当数据被结构化为行时,存储/检索数据将非常容易。此外,您可以轻松删除行。当您需要特定行或特定数组(本例中为表)时,您不必读取整个结构(其他数组)

4) 文本文件

我不建议存储在文本文件中,但可以这样做,您可以将这些数组序列化为文本文件,然后反序列化。但是每次你必须这样做,并阅读整个结构并解析它,即使你只想要例如阵列 2。当您的数据变大时,它可能会很慢。

【讨论】:

  • 非常感谢您的回答,非常详细和有帮助。
【解决方案2】:

对于这种模糊的要求很难给出建议,显然您将数据结构化为字符串数组,并且您希望将其持久地存储在 Android 上 - 这基本上就是我们所知道的。

除了提到的解决方案之外,我会考虑使用GSON 将其作为 JSON 存储到磁盘。虽然读/写可能没有最佳性能,但使用数组数组之类的东西对文档进行建模非常容易,而且我们无法了解您的性能要求与易用性。

class MyData {
  public List<List<String>> data;
}

如果你有一个 MyData 对象,你可以简单地将它序列化为一个字符串,该字符串可以写入磁盘上的文件:

String json = new Gson().toJson(myData);

这会产生类似的东西

{
  "data": [
    ["abc", "cde", "fgh"],
    ["abc", "cde"],
    ["abc", "cde", "fgh", "ijk", "lmn"]
  ]
}

可以很容易地使用例如写入磁盘标准文件和BufferedWriter。然后你可以读回它并使用反序列化:

MyData myData = new Gson().fromJson(json, MyData.class);

【讨论】:

  • 确实,这就是我现在使用的,但计划学习 SQLite。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 2010-10-11
  • 2012-01-09
  • 2013-08-29
  • 2011-08-12
相关资源
最近更新 更多