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.) 我是否应该将整个文件复制并粘贴为应用程序中的静态字符串数组并使用它。

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

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

4

4 回答 4

4

XML 的读取时间总是比简单的文本或 CSV 文件长。XML 在权衡中为您提供的是一种高度结构化和可靠的存储和检索数据的方式。正如您在上面的示例中所见,XML 文件比它们实际包含的数据大 2-3 倍。

如果您确定您永远不会在简单文本文件中遇到“分隔符”字符,那么纯粹从文件速度的角度来看,这可能会很好。

于 2009-07-31T17:42:02.750 回答
3

您没有提供足够的信息来回答这个问题。但是,如果我是一个赌徒,答案可能是“以上都不是”。

我还需要搜索这个文件

这是什么意思?您正在通过一些字符串键搜索?通过一些正则表达式?通过 SQL 样式的查询字符串,其中行的某些部分被解释为整数而不是字符串而不是其他东西?通过谷歌搜索风格的字符串?

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

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

为什么?您如何确定要“跳转”到哪些“任意行”:关键?电话号码?字节偏移?搜索结果?别的东西?

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

  • 这些数据多久更新一次?
  • 这些数据是如何更新的:应用程序的新版本?下载整个文件?下载增量/差异?别的东西?
  • 数据是 ASCII 码吗?UTF-8?还有什么?

等等。

必须搜索的大小建议“使用 SQLite 数据库”,但其他一些答案可能会偏离该解决方案。

于 2009-07-31T18:29:18.253 回答
1

如果您谈论的是非常少量的数据,Android XML 编译器可以为您生成非常有效的二进制表示,您可以像访问 XML 一样访问这些表示。另一方面,如果数据非常大,并且您需要任意查询,我希望 SQLlite 在性能(以及灵活性)上胜出。一个小的基准测试应该很容易编写,并且可以让您对所涉及的基本权衡有一个很好的了解。

平面文件将是最后一个选项,imo,但如果文件不是很大,则可以工作。

于 2009-08-01T21:00:50.427 回答
0

如果您将效率定义为(内存更少、速度更快、大小等),则平面文件或分隔文件将更快地加载和保存。

然而,人们使用 XML 是因为他们愿意牺牲部分速度来换取 XML 更大的灵活性和易用性。

于 2009-07-31T17:47:11.740 回答