簡體   English   中英

使用res / raw中的大文件

[英]using big files from res/raw

我正在嘗試開發使用來自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.");
    }

我很確定-分成幾個資源是沒有用的,因為無論如何您最終都將所有文件讀入RAM /堆中,而大小是有限的。 在類似情況下(我需要在TextView中顯示相對較大的文本),我使用實現CharSequence接口的特殊類克服了這種情況。 實際上,CharSequence有幾種抽象方法可用於在大文件中對必要的片段進行分塊/定位,例如:

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

可能在您的情況下可能會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM