【发布时间】:2013-06-02 15:57:06
【问题描述】:
我正在开发一款具有离线搜索功能的 Android 应用。这需要我阅读一个包含大约 170,000 个条目的字典文件。
我面临严重的性能问题,最初认为这是由于我的代码有 String.match(regex) 循环通过我已将数据读入的 ArrayList。
但是,深入挖掘后,我发现主要问题实际上是数据 I/O。仅通过BufferedReader + InputStream 读取字典文件就需要大约 10,000 毫秒,而无需执行任何搜索。我尝试过其他读取数据的方法,例如使用StringBuilder,但它们似乎没有多大帮助。
这个问题有哪些可能的解决方案?
需要考虑的几点:
- 搜索是递归的
- 应用必须保持离线状态
- 条目基本上是文本行,虽然是东亚语言(增加了搜索的难度,因为整个句子可以是单个字符串。)
我用于读取数据的标准代码是:
InputStream is = getResources().openRawResource(R.raw.data);
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
while(br.readLine() != null){
blahblah....
}
【问题讨论】:
-
你为什么不使用数据库?
-
说实话,我还没有真正尝试过从现有数据库中读取数据,通常是在运行时创建数据库。也许我应该这样做。
-
您每次在运行时创建 170.000 条记录?它们是相同的还是随机的?
-
我的意思是我以前制作的应用程序通常只创建数据库,而不是从现有数据库中检索数据。在这种特殊情况下,不需要写入数据库,只需检索。
-
stackoverflow.com/questions/513084/… 似乎有可能,但并不简单
标签: java android io inputstream