Android - Strings.xml vs文本文件。哪个更快?

时间:2013-02-28 12:16:59

标签: android text-files arrays notepad

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

案例1:

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

CODE:

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);
                    }

案例2:

当我输入一个单词时,我想要查找,然后说" abacus", 使用strings.xml(我在字符串数组中传输了整个3922个单词),它说的相同。我必须在响应之前单击等待。

CODE:

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,因为它们都响应缓慢?你有什么想法我可以消除&#34;没有回应&#34;问题? 提前谢谢!

4 个答案:

答案 0 :(得分:2)

在文本文件中使用Xml的主要优点是

  1. 如果有一个定义良好的结构,那么解析它是一件容易的事。
  2. 你也可以为xml定义模式,你可以很容易地遍历xml,它变得类型安全。
  3. 更好的表现。
  4. 更可靠。
  5. 所以最好使用xml ...

答案 1 :(得分:1)

您遇到等待消息,因为您在主线程中执行了大量操作。您可以使用ThreadsAsyncTask

消除等待消息

对于与您类似的用例,Google建议使用strings.xml

答案 2 :(得分:1)

如果您显示一些代码,这会更容易。我的第一个猜测是,由于您的UI没有响应,您正在UI线程上执行“搜索任务”。在UI线程上执行繁重的任务通常不是一个好主意,而是应该查看AsyncTasks,Threads或其他什么,无论什么最适合。 通过在后台执行任务,用户仍然可以与您的应用程序进行交互 - 例如,如果他的搜索中有拼写错误或者根本不在意,则停止搜索任务。在搜索完成并获取结果之前,您只需显示某种等待对话框。

我无法分辨你的两个建议中的哪一个更快。你可以创建两个线程,既可以采用一种方式,也可以测量时间。

答案 3 :(得分:0)

99,833字可以存储在不到2 MB

在这种情况下,最快的是保留在内存中,所以案例3:)