我正在开发一个具有离线搜索功能的 Android 应用程序。这需要我阅读一个包含大约 170,000 个条目的字典文件。
我正面临严重的性能问题,最初认为这是由于我的代码String.match(regex)
循环了ArrayList
我已将数据读入的代码。
然而,深入挖掘,我发现主要问题实际上是数据 I/O。仅通过BufferedReader
+读取字典文件就需要大约 10,000 毫秒InputStream
,而无需执行任何搜索。我尝试过其他读取数据的方法,例如使用 a StringBuilder
,但它们似乎没有多大帮助。
这个问题有哪些可能的解决方案?
需要考虑的几点:
- 搜索是递归的
- 该应用程序必须保持离线
- 这些条目基本上是文本行,尽管是东亚语言(增加了搜索的难度,因为整个句子可以是单个字符串。)
我用于读取数据的标准代码是:
InputStream is = getResources().openRawResource(R.raw.data);
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
while(br.readLine() != null){
blahblah....
}