Android:Эффективнее ли использовать текстовый файл или XML-файл для хранения статических данных

StackOverflow https://stackoverflow.com/questions/1213882

Вопрос

У меня есть некоторые справочные данные в текстовом файле (~ 5 МБ), которые я хочу использовать с приложением might 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.) Должен ли я сохранять файл как необработанный ресурс и открывать и читать весь файл всякий раз, когда мне нужна определенная строка.

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

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

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

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

[ПРАВИТЬ] Мне также нужно будет выполнить поиск в этом файле и перейти к произвольным ключевым словам, например"линия 1а".

Это было полезно?

Решение

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

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

Другие советы

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

Мне также нужно будет выполнить поиск в этом файле

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

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

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

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

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

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

и так далее.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top