2009-07-31 4 views
3

Ich habe einige Referenzdaten in einer Textdatei (~ 5MB), die ich mit möglicherweise Android-Anwendung verwenden möchte.Android: Ist es effizienter, eine Textdatei oder eine XML-Datei zu verwenden, um statische Daten zu speichern?

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 will ich wissen, ist die effizienteste Art und Weise (weniger Speicher, schnelle, Größe etc.) diese Datei in meiner Anwendung zu verwenden.

a.) Sollte ich die Datei als rohe Ressource speichern und öffnen und lesen Sie die ganze Datei, wenn ich eine bestimmte Zeile brauche.

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

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

c einen Wert nachschlagen müssen.) Soll ich kopiere & nur die gesamte Datei einfügen als ein statisches String-Array in der Anwendung und das verwenden.

... andere Vorschläge sind willkommen.

[EDIT] Ich muss diese Datei auch durchsuchen und zu beliebigen Stichwörtern z. "Linie 1a".

Antwort

3

XML dauert immer länger zum Lesen als einfache Text- oder CSV-Dateien. Was XML Ihnen bietet, ist eine sehr strukturierte und zuverlässige Methode zum Speichern und Abrufen von Daten. XML-Dateien sind, wie Sie in den obigen Beispielen sehen, gut 2-3x größer als die Daten, die sie tatsächlich enthalten.

Wenn Sie sicher sind, dass Sie niemals das Zeichen "delimiter" in Ihrer einfachen Textdatei finden werden, dann würde das wahrscheinlich funktionieren, nur aus der Perspektive der Dateigeschwindigkeit.

+1

Ihre Annahme, dass XML ineffizient ist, ist auf der Android-Plattform weitgehend ungültig. Vermutlich wird er den Androideressourcen-Compiler verwenden, um dies auf die (sehr effiziente) androidspezifische Binärdarstellung von XML zu kompilieren. – jsight

0

Wenn Sie Effizienz als (weniger Speicher, schnell, Größe usw.) definieren, wird eine flache oder begrenzte Datei schneller geladen und gespeichert.

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

3

Sie haben noch nicht genügend Informationen angegeben, um diese Frage zu beantworten. Wenn ich jedoch ein Wettmann 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 String-Schlüssel? Durch einen regelmäßigen Ausdruck? Durch eine Abfrageabfrage im SQL-Stil, bei der bestimmte Teile einer Zeile als Ganzzahlen im Vergleich zu Zeichenfolgen im Vergleich zu etwas anderem interpretiert werden? Durch eine Google-Suchartzeichenfolge?

Jede dieser Antworten diktiert wahrscheinlich eine andere Technologie zum Speichern dieser Informationen.

Ich muss auch ... zu beliebigen Zeilen springen.

Warum? Wie bestimmen Sie, welche "willkürlichen Linien" Sie "springen" zu: Schlüssel? Zeilennummer? Byteoffset? 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? die ganze Datei herunterladen? Deltas/Diffs herunterladen? etwas anderes?
  • Sind die Daten ASCII? UTF-8? Etwas anderes?

und so weiter.

Die Größe, nach der gesucht werden muss, schlägt die Verwendung einer SQLite-Datenbank vor, aber einige der anderen Antworten könnten von dieser Lösung abweichen.

+0

Es ist nur eine Referenzdatei, die selten aktualisiert wird. – Tawani

+0

".sprung zu beliebigen Zeilen" z. gehe zur Zeile "15 | e" – Tawani

1

Wenn Sie über sehr kleine Datenmengen sprechen, kann der Android XML-Compiler sehr effiziente Binärdarstellungen für Sie erstellen, auf die Sie genau wie XML zugreifen können. Auf der anderen Seite, wenn die Daten sehr groß sind und Sie beliebige Abfragen benötigen, würde ich erwarten, dass SQLlite sowohl hinsichtlich der Leistung (als auch der Flexibilität) überzeugt. Ein kleiner Benchmark sollte einfach zu schreiben sein und würde Ihnen eine gute Idee hinsichtlich der grundlegenden Kompromisse geben.

Flat-Dateien wäre eine letzte Option, imo, könnte aber funktionieren, wenn die Datei nicht sehr groß ist.

+0

Ich würde auch für sqlite für große Daten gehen! Es ist sehr einfach Daten in Sqlite zu indizieren. – tuinstoel