使用res / raw中的大文件

时间:2010-11-15 12:07:12

标签: android

我正在尝试开发使用res / raw源文件的字典应用程序。 它适用于我使用较小的文件,但不能使用我必须使用的文件,即cca 5mb。

我决定将它分成几部分并以这种方式使用它因为看起来android对资源文件夹(1mb?)有一些文件大小限制。 但它不会这样工作,它会在程序中加载某些内容,但不会加载所有字典文件。什么似乎是问题?我是否会对此采取完全错误的方式?

    private void loadWords() throws IOException {
        final Resources resources = mHelperContext.getResources();
        InputStream inputStream = resources.openRawResource(R.raw.definitions1);
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        ucitaj(reader);

        InputStream inputStream2 = resources.openRawResource(R.raw.definitions2);
        BufferedReader reader2 = new BufferedReader(new InputStreamReader(inputStream2));
        ucitaj(reader2);

        InputStream inputStream3 = resources.openRawResource(R.raw.definitions3);
        BufferedReader reader3 = new BufferedReader(new InputStreamReader(inputStream3));
        ucitaj(reader3);

        InputStream inputStream4 = resources.openRawResource(R.raw.definitions4);
        BufferedReader reader4 = new BufferedReader(new InputStreamReader(inputStream4));
        ucitaj(reader4);

        InputStream inputStream5 = resources.openRawResource(R.raw.definitions5);
        BufferedReader reader5 = new BufferedReader(new InputStreamReader(inputStream5));
        ucitaj(reader5);

        InputStream inputStream6 = resources.openRawResource(R.raw.definitions6);
        BufferedReader reader6 = new BufferedReader(new InputStreamReader(inputStream6));
        ucitaj(reader6);

-

  private void ucitaj(BufferedReader reader) throws IOException {
        Log.d(TAG, "Loading words...");
        try {
            String line;
            while ((line = reader.readLine()) != null) {
                String[] strings = TextUtils.split(line, " -- ");
                if (strings.length < 2) continue;
                long id = addWord(strings[0].trim(), strings[1].trim());
                if (id < 0) {
                    Log.e(TAG, "unable to add word: " + strings[0].trim());
                }
            }
        } finally {
            reader.close();
        }
        Log.d(TAG, "DONE loading words.");
    }

1 个答案:

答案 0 :(得分:0)

我很确定 - 将几个资源分块是无用的,因为无论如何你最终都会将所有文件读入RAM /堆,这个大小是有限的。在类似的情况下(我需要在TextView中显示相对较大的文本)我已经克服了使用特殊类的情况,该类正在实现CharSequence接口。实际上,CharSequence有几个抽象方法,可用于在大文件中分块/定位必要的片段,如:

abstract char charAt(int index)
abstract CharSequence subSequence(int start, int end)

可能在你的情况下它可能会有所帮助。