2010-01-11 57 views
3

我想要一些靜態的數值和文本值作爲應用程序資源。例如我的數據是這樣的:在Android中的資源中存儲短字符串和數字值

Levels 5 First_Level 500 60 1 Second_Level 500 80 1 Third_Level 200 60 1 Fourth_Level 130 30 2 Final_Level 100 30 3 
... and another 300 lines... 

數據的格式和順序是預定義的,並保證是有效的。

我可以用java.util.Scanner來讀取它,但它在Android中速度非常慢,讀取10 KB文件需要幾分鐘。由於內部基於正則表達式的模式匹配,所以速度很慢(當我跟蹤它時)。

你會建議如何存儲它們?

回答

1

您可以將其存儲在對象數組列表中,該對象只是實現Serializable。

然後只是ObjectOutputStream.writeObject(列表),並稍後使用readObject。

+0

只是對象序列化可能是最慢的可能的方法:-) – Matthias 2010-01-12 14:01:13

+0

從RES /生:) – Cytown 2010-01-12 14:35:18

1

您可以將它作爲原始數據存儲在resources/raw(例如CSV或TSV)中,並使用Resources.openRawResource使用InputStream從中讀取。這應該是相當快的。

+0

忘了提不應該慢閱讀,這是我做的。問題是解析數字非常緩慢。 – yuku 2010-01-12 06:21:20

+0

你說的10KB文件需要*分鐘*?我不知道Scanner類,但您是否嘗試過使用簡單的BufferedReader和簡單的標記器或分割表達式?我不敢相信這會花費幾秒鐘的時間。 – Matthias 2010-01-12 14:00:04

1

一年多的Android開發後,我現在知道幾個選項:

  1. 存儲字符串,整數等作爲字符串/整數資源。把<string name="mystring">My String</string><integer name="myint">123</integer>並使用R.string.mystringR.integer.myint來引用它們。缺點是不能嵌套,所以我們在存儲結構化數據時會遇到困難。
  2. 使用res/xml下的xml文件。令人驚訝的是,它們被編譯爲binary-xml,它將整數,布爾值,浮點數等分析爲數據格式,並且可以很快讀取。使用Resources#getXml獲取解析器,然後使用方法(如getAttributeIntValue("attribute_name"))直接獲取int值。
  3. 使用Parcel -ed二進制文件。 android.os.Parcel是存儲各種類型值的一種非常快速的方式。您可以將Parcelable應用於您自己的數據結構以支持該功能。
相關問題