我在文本文件(~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。)我应该复制&amp;将整个文件粘贴为应用程序中的静态字符串数组并使用它。
......欢迎任何其他建议。
[编辑] 我还需要搜索此文件并跳转到任意关键字,例如“第1a行”。
答案 0 :(得分:4)
XML总是比简单的文本或CSV文件需要更长的时间来阅读。 XML在折衷方面为您提供的是一种高度结构化且可靠的存储和检索数据的方法。正如您在上面的示例中所看到的,XML文件比实际包含的数据大2-3倍。
如果您确定自己永远不会遇到简单文本文件中的“分隔符”字符,那么这可能会很好,纯粹从文件速度的角度来看。
答案 1 :(得分:3)
您没有提供足够的信息来回答这个问题。但是,如果我是一个博彩人,答案可能是“以上都不是”。
我还需要搜索这个文件
这是什么意思?你正在搜索一些字符串键?通过一些正则表达式?通过SQL样式的查询字符串,其中某行的某些部分被解释为整数与字符串而不是其他东西?通过谷歌搜索风格的字符串?
这些答案中的每一个都可能决定了存储此信息的不同技术。
我还需要......跳到任意行。
为什么呢?你是如何确定你“跳”到哪个“任意线”:关键?电话号码?字节偏移量?搜索结果?别的什么?
当然,还有其他问题,例如:
等等。
必须搜索的大小的东西建议“使用SQLite数据库”,但其他一些答案可能会避开该解决方案。
答案 2 :(得分:1)
如果您正在讨论非常少量的数据,那么Android XML编译器可以为您提供非常有效的二进制表示,您可以像XML一样访问它们。另一方面,如果数据非常大,并且您需要任意查询,我希望SQLlite能够赢得性能(以及灵活性)。一个小的基准应该很容易编写,并且会给你一个关于所涉及的基本权衡的好主意。
平面文件将是最后一个选项,imo,但如果文件不是很大,则可以正常工作。
答案 3 :(得分:0)
如果将效率定义为(更少的内存,快速,大小等),则可以更快地加载和保存平面或分隔文件。
然而,人们使用XML是因为他们愿意以某种速度交换XML以获得更大的灵活性和易用性。