我希望将一些静态数值和文本值作为应用程序资源。例如,我的数据是这样的:
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文件需要几分钟。由于内部基于正则表达式的模式匹配(当我追踪它时),它很慢。
您建议以什么方式存储它们?
答案 0 :(得分:1)
您可以将其存储在对象arraylist中,该对象只实现Serializable。
然后只是ObjectOutputStream.writeObject(列表),以后再使用readObject。
答案 1 :(得分:1)
您可以将其作为原始数据存储在resources/raw
中(例如,作为CSV或TSV),并使用Resources.openRawResource使用InputStream从中读取。这应该相当快。
答案 2 :(得分:1)
经过一年多的Android开发,我现在知道几个选项:
<string name="mystring">My String</string>
或<integer name="myint">123</integer>
并使用R.string.mystring
或R.integer.myint
引用它们。缺点是没有嵌套,因此我们将难以存储结构化数据。res/xml
下的xml文件。令人惊讶的是,它们被编译为binary-xml,它将整数,布尔值,浮点数等解析为数据格式,并且可以非常快速地读取。使用Resources#getXml
获取解析器,然后使用getAttributeIntValue("attribute_name")
等方法直接将值作为int。Parcel
- ed二进制文件。 android.os.Parcel是存储各种类型值的快速方法。您可以将Parcelable
实施到您自己的数据结构中以支持它。