我正在开发具有离线搜索功能的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....
}
答案 0 :(得分:0)
我同意Reuben L.我会使用sqlite数据库而不是解析文本文件。
在我的一个应用程序中,我将捷克共和国的所有村庄和城市(超过200000条记录)放入数据库进行快速离线搜索。它可以在1秒内找到基于名称前缀的城市列表
为了让它更快,我引入了db索引。我添加了一列,并在那里填写了城市名称的第一个字母。然后我可以通过这样的前缀搜索城市:
select * from cities where firstLetter = ? and cityName like ?;
它将性能提高了两倍以上。