Android: более эффективно использовать текстовый файл или файл XML для хранения статических данных - PullRequest
4 голосов
/ 31 июля 2009

У меня есть некоторые справочные данные в текстовом файле (~ 5 МБ), которые я хочу использовать в приложениях с поддержкой Android.

Файл имеет формат:

1|a|This is line 1a
1|b|This is line 1b
2|a|This is line 2a
2|b|This is line 2b
2|c|This is line 2c

То, что я хочу знать, - это самый эффективный способ (меньше памяти, быстрый, размер и т. Д.) Использовать этот файл в моем приложении.

a.) Должен ли я сохранить файл как необработанный ресурс, открывать и читать весь файл всякий раз, когда мне нужна определенная строка.

b.) Должен ли я конвертировать файл в XML и использовать XPath для запроса файла, когда мне понадобится найти значение

<!--sample XML -->
<data>
  <line number="1">
     <entry name="a">This is line 1 a</entry>
  </line>
</data>

c.) Должен ли я просто скопировать и вставить весь файл в виде массива статических строк в приложение и использовать его.

... любые другие предложения приветствуются.

[EDIT] Мне также нужно будет найти этот файл и перейти к произвольным ключевым словам, например, «линия 1а».

Ответы [ 4 ]

4 голосов
/ 31 июля 2009

XML всегда будет читать дольше, чем простой текст или файлы CSV. То, что XML дает вам в обмен, - это высоко структурированный и надежный способ хранения и извлечения данных. XML-файлы, как вы можете видеть в приведенных выше примерах, на 2-3 раза больше данных, которые они на самом деле содержат.

Если вы уверены, что никогда не встретите символ «разделитель» в вашем простом текстовом файле, то это, вероятно, сработает просто отлично, с точки зрения скорости файла.

3 голосов
/ 31 июля 2009

Вы не предоставили достаточно информации, чтобы ответить на этот вопрос. Однако, если бы я был игроком на пари, ответ, вероятно, «ничего из вышеперечисленного».

Мне также нужно будет найти этот файл

Что это значит? Вы ищете какой-то строковый ключ? Какое-то регулярное выражение? Строка запроса в стиле SQL, где определенные части строки интерпретируются как целые числа по сравнению со строками по сравнению с чем-то еще? По строке в стиле поиска Google?

Каждый из этих ответов, вероятно, диктует свою технологию хранения этой информации.

Мне также нужно ... перейти к произвольным строкам.

Почему? Как вы определяете, к каким «произвольным линиям» вы «переходите»: key? номер строки? смещение байта? результаты поиска? что-то еще?

И, конечно, есть и другие вопросы, например:

  • Как часто обновляются эти данные?
  • Как обновляются эти данные: новая версия приложения? скачать весь файл? скачать deltas / diffs? что-то еще?
  • Являются ли данные ASCII? UTF-8? Что-то еще?

и т. Д.

Что-то такого размера, по которому нужно искать, предлагает «использовать базу данных SQLite», но некоторые другие ответы могут уклониться от этого решения.

1 голос
/ 02 августа 2009

Если вы говорите об очень небольших объемах данных, компилятор Android XML может создать для вас очень эффективные двоичные представления, к которым вы можете получить доступ, как и к XML. С другой стороны, если данные вообще очень велики и вам нужны произвольные запросы, я ожидаю, что SQLlite выиграет в производительности (а также в гибкости). Небольшой бенчмарк должен быть прост в написании и даст вам хорошее представление об основных компромиссах.

Плоские файлы были бы последним вариантом, imo, но могли бы работать, если файл не очень большой.

0 голосов
/ 31 июля 2009

Если вы определяете эффективность как (меньше памяти, скорость, размер и т. Д.), Плоский или разделенный файл будет быстрее загружаться и сохраняться.

Однако люди используют XML, потому что они хотят обменять часть этой скорости на большую гибкость и простоту использования XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...