2010-11-15 54 views
0

我正在嘗試開發使用res/raw源文件的字典應用程序。 它適用於當我使用一個較小的文件,但不是與我必須使用哪個是cca 5mb的文件。使用res/raw的大文件

我決定將它拆分成幾部分,並以這種方式使用它,因爲它顯示android對assets文件夾(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."); 
    } 
+2

「它加載程序中的東西,但不是所有的字典文件」究竟裝載什麼,什麼不是?你能給我們提供'ucitaj'方法的代碼嗎? – 2010-11-15 12:12:45

+0

我在這裏添加了ucitaj方法,但是在調試究竟是什麼被加載的時候有一些問題,因爲它將數據保存到android上的sqlite數據庫中,並且在計算機上正確調試它有點困難。 – stratocaster 2010-11-15 14:35:41

回答

0

我敢肯定 - 這分塊成幾個資源是無用的,因爲反正你最終的所有文件讀入內存/堆,其大小是有限的。在類似情況下(我需要在TextView中顯示比較大的文本)我使用正在實現CharSequence接口的特殊類來克服情況。事實上CharSequence中有哪些可以用於組塊的大文件/定位進行必要的片段,像幾個抽象方法:

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

可能在你situtation可能會有所幫助。

+0

內存大小有限,但我使用的這個文件是5MB,我認爲它甚至沒有超過這個限制?順便說一句,我把這個來自我的源文件的單詞定義到一個sqlite數據庫。 – stratocaster 2010-11-15 17:18:46

相關問題