Android: Ist es effizienter, eine Textdatei oder eine XML-Datei zu verwenden, statische Daten zu speichern,

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

Frage

Ich habe einige Referenzdaten in einer Textdatei (~ 5 MB), die ich mit aller Macht Android-Anwendung verwendet werden soll.

Die Datei ist im 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

Was ich möchte wissen, ist die effizienteste Art und Weise (weniger Speicher, schnelle, Größe etc.) diese Datei in meiner Anwendung zu verwenden.

a.) Sollte speichere ich die Datei als Ausgang Ressource und offen und die gesamte Datei lesen, wenn ich eine bestimmte Linie benötigen.

b.) Sollte konvertiere ich die Datei auf XML und XPath verwenden, um die Datei abzufragen, wann immer ich brauche einen Wert suchen

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

c.) Soll ich kopiere einfach die gesamte Datei als ein statisches String-Array in der Anwendung und verwende diese.

... andere Vorschläge sind willkommen.

[EDIT] Ich muss auch diese Datei suchen und zu beliebigen Keywords springen z.B. "Linie 1a".

War es hilfreich?

Lösung

XML wird immer länger dauert als einfache Text- oder CSV-Dateien zu lesen. Welche XML gibt Sie in dem Kompromiss ist eine stark strukturierte und zuverlässige Art und Weise zu speichern und Abrufen von Daten. XML-Dateien sind, wie Sie in den obigen Beispielen, eine gute 2-3x größer als die Daten sehen können sie tatsächlich enthalten.

Wenn Sie sicher sind, dass Sie nie in die „Trennzeichen“ Zeichen in Ihrer einfachen Textdatei laufen gehen, dann ist wahrscheinlich das würde gut funktionieren, rein aus einer Datei Geschwindigkeit Perspektive.

Andere Tipps

Sie haben nicht genügend Informationen, um diese Frage zu beantworten zu versehen. Allerdings, wenn ich ein Wett-Mann wäre, ist die Antwort wahrscheinlich „keine der oben genannten“.

  

Ich werde auch diese Datei suchen müssen

Was bedeutet das? Sie suchen nach einem gewissen String-Schlüssel? Wie durch einen regulären Ausdruck? Durch eine Abfrage-String SQL-Stil, wo bestimmte Teile einer Linie sind als ganze Zahlen im Vergleich zu Strings gegen etwas anderes interpretiert? Durch ein Google-Suche-String?

Jede dieser Antworten wahrscheinlich diktiert eine andere Technologie, um diese Informationen zu speichern.

  

Ich werde auch zu ... Sprung zu beliebigen Linien müssen.

Warum? Wie werden Bestimmen Sie, welche „willkürliche Linien“ Sie „springen“ ing zu: key? Zeilennummer? Byte-Offset? Suchergebnisse? etwas anderes?

Und natürlich gibt es noch andere Fragen, wie:

  • Wie oft werden diese Daten aktualisiert?
  • Wie werden diese Daten aktualisiert: neue Version der App? Laden Sie die gesamte Datei? Download Deltas / diffs? etwas anderes?
  • Ist die Daten ASCII? UTF-8? Etwas anderes?

und so weiter.

Etwas, das eine Größe, die auf schlägt „eine SQLite-Datenbank verwenden“ gesucht werden muß, aber einige der anderen Antworten von dieser Lösung könnten weg lenken.

Wenn Sie über sehr kleine Datenmengen sprechen, die Android-XML-Compiler sehr effiziente binäre Darstellungen für Sie produzieren können, dass Sie ebenso wie XML zugreifen können. Auf der anderen Seite, wenn die Daten überhaupt sehr groß, und Sie beliebige Abfragen benötigen, würde ich SQLlite erwartet auf Leistung zu gewinnen aus (wie auch Flexibilität). Eine kleine Benchmark sollte einfach zu schreiben und Sie würden eine gute Idee, den Grund Kompromissen beteiligt geben.

Flat-Dateien wären eine letzte Option sein, imo, aber könnten, wenn die Datei nicht sehr groß ist.

Wenn Sie Effizienz (weniger Speicher, schnelle, Größe etc.) definieren, eine flache oder getrennte Datei wird schneller zu laden und zu speichern.

Allerdings verwenden die Menschen XML, weil sie etwas von dieser Geschwindigkeit bereit zu handeln sind für XML ist eine größere Flexibilität und Benutzerfreundlichkeit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top