Android: est-il plus efficace d'utiliser un fichier texte ou un fichier XML pour stocker des données statiques

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

Question

J'ai des données de référence dans un fichier texte (~ 5 Mo) que je souhaite utiliser avec une application Android éventuelle.

Le fichier est au format:

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

Ce que je veux savoir, c'est le moyen le plus efficace (utiliser moins de mémoire, moins de temps, de taille, etc.) pour utiliser ce fichier dans mon application.

a.) Dois-je enregistrer le fichier en tant que ressource brute, puis l'ouvrir et le lire au complet chaque fois que j'ai besoin d'une certaine ligne?

b.) Devrais-je convertir le fichier en XML et utiliser XPath pour interroger le fichier chaque fois que j'ai besoin de rechercher une valeur

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

c.) Devrais-je simplement copier & amp; collez le fichier entier en tant que tableau de chaîne statique dans l'application et utilisez-le.

... toutes les autres suggestions sont les bienvenues.

[MODIFIER] Je devrai également effectuer une recherche dans ce fichier et passer à des mots-clés arbitraires, par exemple. "ligne 1a".

Était-ce utile?

La solution

La lecture de XML prend toujours plus de temps que le texte simple ou les fichiers CSV. Ce que XML vous offre en contrepartie constitue un moyen extrêmement structuré et fiable de stockage et de récupération de données. Comme vous pouvez le constater dans les exemples ci-dessus, les fichiers XML ont une taille supérieure de 2 à 3 fois celle des données qu’ils contiennent.

Si vous êtes certain de ne jamais rencontrer le & delimiter " caractère dans votre fichier texte simple, alors cela fonctionnerait probablement très bien, uniquement du point de vue de la vitesse du fichier.

Autres conseils

Vous n'avez pas fourni suffisamment d'informations pour répondre à cette question. Cependant, si j'étais un homme de paris, la réponse serait probablement "aucune de ces réponses".

  

Je devrai également rechercher ce fichier

Qu'est-ce que cela signifie? Vous recherchez une clé de chaîne? Par une expression régulière? Par une chaîne de requête de style SQL où certaines parties d'une ligne sont interprétées comme des entiers, par rapport à des chaînes, par rapport à autre chose? Par une chaîne de style de recherche Google?

Chacune de ces réponses dicte probablement une technologie différente pour stocker ces informations.

  

Je devrai également ... sauter à des lignes arbitraires.

Pourquoi? Comment déterminez-vous les " lignes arbitraires " vous "sautez" dans: touche? numéro de ligne? décalage d'octet? Résultats de la recherche? autre chose?

Et, bien sûr, il y a d'autres questions, telles que:

  • À quelle fréquence ces données sont-elles mises à jour?
  • Comment ces données sont-elles mises à jour: nouvelle version de l'application? télécharger le fichier entier? télécharger des deltas / diffs? autre chose?
  • Les données sont-elles en ASCII? UTF-8? Quelque chose d'autre?

et ainsi de suite.

Quelque chose de cette taille à rechercher, suggère "d'utiliser une base de données SQLite", mais certaines des autres réponses risquent de détourner votre attention de cette solution.

Si vous parlez de très petites quantités de données, le compilateur XML Android peut produire pour vous des représentations binaires très efficaces auxquelles vous pouvez accéder, tout comme XML. D'un autre côté, si les données sont très volumineuses et que vous avez besoin de requêtes arbitraires, je m'attendrais à ce que SQLlite gagne sur les performances (ainsi que la flexibilité). Un petit repère devrait être facile à écrire et vous donner une bonne idée des compromis de base impliqués.

Les fichiers plats seraient une dernière option, imo, mais pourraient fonctionner si le fichier n'est pas très volumineux.

Si vous définissez efficacité comme (moins de mémoire, plus rapide, plus petite, etc.), un fichier plat ou délimité sera plus rapide à charger et à sauvegarder.

Cependant, les gens utilisent XML parce qu'ils souhaitent échanger une partie de cette vitesse contre une plus grande flexibilité et facilité d'utilisation de XML.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top