2010-01-11 58 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应用于您自己的数据结构以支持该功能。
相关问题