2009-07-31 4 views
3

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

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

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> 

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

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

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

ответ

3

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

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

+1

Ваше предположение о том, что xml неэффективно, в значительной степени недействительно на платформе Android. Предположительно, он будет использовать компилятор ресурсов android, чтобы скомпилировать это с помощью (очень эффективного) специфического для Android бинарного представления XML. – jsight

0

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

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

3

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

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

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

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

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

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

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

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

и так далее.

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

+0

Это просто справочный файл, который редко обновляется. – Tawani

+0

".jump на произвольные строки", например. goto line "15 | e" – Tawani

1

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

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

+0

Я бы пошел на sqlite и для больших данных! Очень легко индексировать данные в Sqlite. – tuinstoel