0

我有一个字典数据库,它总共包含 99,833 个单词,但每个字母分开。我正在测试包含 3922 个单词的 dictionaryA.txt。

情况1:

当我输入一个我想查找的单词时,让我们说“算盘”,使用缓冲阅读器,我的应用程序说“论文没有响应。等待 - 退出”。如果我选择等待,它将返回单词 abacus 及其定义。

代码:

InputStream inputStream = getResources().openRawResource(R.raw.definitiona); 
                    try {
                        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
                        String s = in.readLine();
                        String delimiter = " - ";
                        String del[];
                        while(s != null)
                        {
                            s = in.readLine().replaceAll("\\s+", " ");
                            del = s.split(delimiter);
                            if (enhancedStem.equals(del[0]))
                            {
                                in.close();
                                databaseOutput.setText(s);
                                break;
                            }                        
                        }
                        in.close();
                        }
                    catch (FileNotFoundException e) {
                        databaseOutput.setText("" + e);
                    }
                    catch (IOException e1) {
                        databaseOutput.setText("" + e1);
                    }

案例二:

当我输入一个我想查找的单词时,让我们说“算盘”,使用 strings.xml(我将整个 3922 个单词转移到一个字符串数组中),它说的也是一样的。我必须在它响应之前单击等待。

代码:

String[] wordA = getResources().getStringArray(R.array.DictionaryA);
                String delimiter = " - ";
                String[] del;
                for (int wordActr = 0; wordActr <= wordA.length - 1; wordActr++)
                {
                    String wordString = wordA[wordActr].toString();
                    del = wordString.split(delimiter);

                    if (enhancedStem.equals(del[0]))
                    {
                        databaseOutput.setText(wordA[wordActr]);
                        break;
                    }
                    else
                        databaseOutput.setText("Word not found!");

                }

你能告诉我哪个更好吗?我应该继续使用我的文本文件吗?或者将它们转移到strings.xml,因为它们都响应缓慢?您知道如何消除“无响应”问题吗?提前致谢!

4

4 回答 4

2

与文本文件相比,使用 Xml 的主要优点是

  1. 如果具有明确定义的结构,那么解析它是一件容易的事。
  2. 您还可以为 xml 定义模式,这样您就可以很容易地遍历 xml,并且它变得类型安全。
  3. 更好的性能。
  4. 更可靠。

所以最好使用xml ...

于 2013-02-28T12:23:13.047 回答
1

如果你显示一些代码,这会更容易。我的第一个猜测是,由于您的 UI 没有响应,因此您正在 UI 线程上执行“搜索任务”。在 UI 线程上执行繁重的任务通常不是一个好主意,相反,您应该查看 AsyncTasks、Threads 或其他任何最适合的东西。通过在后台执行任务,用户仍然可以与您的应用程序交互 - 例如,如果他在搜索中出现拼写错误或根本不再关心,则停止搜索任务。在搜索完成并获取结果之前,您可以简单地显示某种等待对话框。

我不知道你的两个建议中哪一个更快。您可以创建两个线程,都以一种方式进行并测量时间。

于 2013-02-28T12:21:09.507 回答
1

您遇到等待消息是因为您在主线程中执行了繁重的操作。您可以使用ThreadsAsyncTask消除等待消息

Google 建议将 strings.xml 用于与您类似的用例

于 2013-02-28T12:20:44.003 回答
0

99,833 个字可以存储在不到 2 MB 的空间中

在那种情况下,最快的就是保存在内存中,所以情况 3 :)

于 2013-02-28T12:22:12.180 回答