3

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

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

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

4

3 回答 3

1

您可以将它存储在对象数组列表中,该对象仅实现可序列化。

然后就是ObjectOutputStream.writeObject(list),后面使用readObject。

于 2010-01-11T08:03:16.670 回答
1

经过一年多的 Android 开发,我现在知道了几个选择:

  1. 将字符串、整数等存储为字符串/整数资源。使用or放置<string name="mystring">My String</string><integer name="myint">123</integer>引用它们。缺点是不能嵌套,因此我们将难以存储结构化数据。R.string.mystringR.integer.myint
  2. 使用 .xml 下的 xml 文件res/xml。令人惊讶的是,它们被编译成 binary-xml,它将整数、布尔值、浮点数等解析为机器格式,并且可以非常快速地读取。使用Resources#getXml获取解析器,然后getAttributeIntValue("attribute_name")直接使用int等方法获取值。
  3. 使用Parcel-ed 二进制文件。android.os.Parcel是一种存储各种类型值的非常快速的方法。您可以实现Parcelable自己的数据结构来支持它。
于 2011-05-16T02:36:37.380 回答
1

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

于 2010-01-11T09:35:38.733 回答