有效地读取大型数据集 - Android

时间:2013-06-02 15:57:07

标签: java android io inputstream

我正在开发具有离线搜索功能的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....
        }

1 个答案:

答案 0 :(得分:0)

我同意Reuben L.我会使用sqlite数据库而不是解析文本文件。

在我的一个应用程序中,我将捷克共和国的所有村庄和城市(超过200000条记录)放入数据库进行快速离线搜索。它可以在1秒内找到基于名称前缀的城市列表

为了让它更快,我引入了db索引。我添加了一列,并在那里填写了城市名称的第一个字母。然后我可以通过这样的前缀搜索城市:

select * from cities where firstLetter = ? and cityName like ?;

它将性能提高了两倍以上。