Хранение коротких строк и числовых значений в ресурсах в Android - PullRequest
3 голосов
/ 11 января 2010

Я хочу иметь статические числовые и текстовые значения в качестве ресурса приложения. Например, мои данные таковы:

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 КБ занимает минуты. Это медленно из-за сопоставления с шаблоном на основе регулярных выражений внутри (когда я его проследил).

Как бы вы предложили их хранить?

Ответы [ 3 ]

1 голос
/ 11 января 2010

Вы можете сохранить их как необработанные данные в resources/raw (например, в формате CSV или TSV) и использовать Resources.openRawResource для чтения из них с использованием InputStream. Это должно быть достаточно быстро.

1 голос
/ 16 мая 2011

После более чем года разработки Android я знаю несколько вариантов:

  1. Хранить строки, целые числа и т. Д. В качестве строковых / целочисленных ресурсов. Положите <string name="mystring">My String</string> или <integer name="myint">123</integer> и укажите их, используя R.string.mystring или R.integer.myint. Недостатком является отсутствие вложенности, поэтому у нас будут проблемы с хранением структурированных данных.
  2. Использовать xml-файлы под res/xml. Удивительно, но они компилируются в двоичный XML-файл, который анализирует целые числа, логические значения, числа с плавающей запятой и т. Д. В машинном формате и может быть прочитан очень быстро. Используйте Resources#getXml, чтобы получить анализатор, а затем используйте методы, такие как getAttributeIntValue("attribute_name"), чтобы получить значение как int напрямую.
  3. Использовать Parcel -данный двоичный файл. android.os.Parcel - это очень быстрый способ хранения значений различных типов. Вы можете реализовать Parcelable в своей собственной структуре данных для поддержки этого.
1 голос
/ 11 января 2010

Вы можете сохранить его в массиве объектов, этот объект просто реализует Serializable.

Затем просто ObjectOutputStream.writeObject (list), а затем используйте readObject.

...