在Android中的资源中存储短字符串和数值

时间:2010-01-11 06:57:59

标签: android java.util.scanner

我希望将一些静态数值和文本值作为应用程序资源。例如,我的数据是这样的:

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文件需要几分钟。由于内部基于正则表达式的模式匹配(当我追踪它时),它很慢。

您建议以什么方式存储它们?

3 个答案:

答案 0 :(得分:1)

您可以将其存储在对象arraylist中,该对象只实现Serializable。

然后只是ObjectOutputStream.writeObject(列表),以后再使用readObject。

答案 1 :(得分:1)

您可以将其作为原始数据存储在resources/raw中(例如,作为CSV或TSV),并使用Resources.openRawResource使用InputStream从中读取。这应该相当快。

答案 2 :(得分: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实施到您自己的数据结构中以支持它。