安卓:使用文本文件还是XML文件存储静态数据更有效?

4
我是一名有用的助手,可以为您翻译文本。

我有一个文本文件(约5MB),其中包含一些参考数据,我想在我的Android应用程序中使用。

该文件的格式如下:

1|a|This is line 1a
1|b|This is line 1b
2|a|This is line 2a
2|b|This is line 2b
2|c|This is line 2c

我想知道在我的应用程序中使用此文件的最有效方法(内存少,快速,大小等)。
a.) 我应该将文件保存为原始资源,并在需要某一行时打开和读取整个文件。
b.) 我应该将文件转换为XML,并在需要查找值时使用XPath查询文件。
<!--sample XML -->
<data>
  <line number="1">
     <entry name="a">This is line 1 a</entry>
  </line>
</data>

c.) 我应该将整个文件复制粘贴为应用程序中的静态字符串数组并使用它吗?

... 欢迎任何其他建议。

[编辑] 我还需要搜索此文件并跳转到任意关键字,例如 "line 1a"。

4个回答

4

相对于简单文本或CSV文件,XML读取时间会更长。但是,XML相较于这两种格式而言,提供了一种高度结构化和可靠的数据存储和检索方式。正如上面的例子所示,XML文件实际上比它们所包含的数据多出2-3倍。

如果你确信你的简单文本文件中永远都不会出现“分隔符”字符,那么从文件速度的角度来看,它可能也能很好地工作。


1
你认为XML在Android平台上效率低下的假设大部分是无效的。他很可能会使用Android资源编译器将其编译成非常高效的Android特定二进制表示形式的XML。 - jsight

3

你没有提供足够的信息来回答这个问题。不过,如果我是一个投注人,答案可能是“以上都不是”。

我还需要搜索这个文件

这是什么意思?您是通过一些字符串关键字进行搜索吗?通过某些正则表达式进行搜索吗?通过类似SQL的查询字符串进行搜索,其中某些行的某些部分被解释为整数、字符串或其他内容?通过类似Google搜索的字符串进行搜索吗?

每个答案可能都要求使用不同的技术来存储此信息。

我还需要……跳转到任意行。

为什么?您如何确定要“跳转”到哪些“任意行”:关键字?行号?字节偏移量?搜索结果?还是其他方式?

当然,还有其他问题,例如:

  • 此数据更新频率如何?
  • 如何更新此数据:应用程序的新版本?下载整个文件?下载差异/增量?还是其他方式?
  • 此数据是ASCII编码还是UTF-8编码?还是其他编码?

等等。

需要搜索的那么大的文件建议“使用SQLite数据库”,但其他答案可能会远离该解决方案。


".跳转到任意行" 例如,转到行 "15|e" - Tawani

1
如果你谈论的是非常少量的数据,Android XML编译器可以为你生成非常高效的二进制表示形式,你可以像访问XML一样访问它。另一方面,如果数据非常大,并且您需要任意查询,我希望SQLlite在性能(以及灵活性)方面胜出。一个小的基准测试应该很容易编写,并会给您一个关于涉及的基本权衡的好主意。
在我看来,平面文件将是最后的选择,但如果文件不是很大,也可以使用。

我也会选择SQLite来处理大量数据!在SQLite中,索引数据非常容易。 - tuinstoel

0
如果你将效率定义为(占用更少的内存、速度快、大小等),那么扁平文件或分隔符文件将更快地加载和保存。
然而,人们使用XML是因为他们愿意为了XML更大的灵活性和易用性而牺牲一些速度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接