Domanda

Ho alcuni dati di riferimento in un file di testo (~ 5 MB) che voglio usare con una possibile applicazione Android.

Il file ha il formato:

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

Quello che voglio sapere è il modo più efficiente (meno memoria, velocità, dimensioni, ecc.) di utilizzare questo file all'interno della mia applicazione.

a.) Devo salvare il file come risorsa non elaborata e aprire e leggere l'intero file ogni volta che ho bisogno di una determinata riga.

b.) Devo convertire il file in XML e utilizzare XPath per interrogare il file ogni volta che devo cercare un valore

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

c.) Devo solo copiare & amp; incolla l'intero file come array di stringhe statiche nell'applicazione e usalo.

... qualsiasi altro suggerimento è il benvenuto.

[EDIT] Dovrò anche cercare questo file e passare a parole chiave arbitrarie, ad es. "riga 1a".

È stato utile?

Soluzione

La lettura dell'XML richiederà sempre più tempo rispetto ai semplici file di testo o CSV. Ciò che XML ti offre nel compromesso è un modo altamente strutturato e affidabile di archiviare e recuperare dati. I file XML sono, come puoi vedere negli esempi precedenti, 2-3 volte più grandi dei dati che contengono effettivamente.

Se sei sicuro di non imbatterti mai nel delimitatore " " carattere nel tuo semplice file di testo, quindi probabilmente funzionerebbe bene, puramente dal punto di vista della velocità del file.

Altri suggerimenti

Non hai fornito informazioni sufficienti per rispondere a questa domanda. Tuttavia, se fossi un uomo di scommesse, la risposta è probabilmente "nessuna delle precedenti".

  

Dovrò anche cercare questo file

Cosa significa? Stai cercando con una chiave di stringa? Con qualche espressione regolare? Da una stringa di query in stile SQL in cui determinate parti di una linea vengono interpretate come numeri interi contro stringhe rispetto a qualcos'altro? Con una stringa di ricerca di Google?

Ognuna di queste risposte probabilmente impone una tecnologia diversa per la memorizzazione di queste informazioni.

  

Dovrò anche ... saltare a linee arbitrarie.

Perché? Come stai determinando quali "linee arbitrarie" stai per "saltare" a: chiave? numero di riga? byte offset? risultati di ricerca? qualcos'altro?

E, naturalmente, ci sono altre domande, come:

  • Con che frequenza vengono aggiornati questi dati?
  • Come vengono aggiornati questi dati: nuova versione dell'app? scarica l'intero file? scaricare delta / diff? qualcos'altro?
  • I dati sono ASCII? UTF-8? Qualcos'altro?

e così via.

Qualcosa di quelle dimensioni che devono essere ricercate suggerisce "usa un database SQLite", ma alcune delle altre risposte potrebbero allontanarsi da quella soluzione.

Se stai parlando di quantità molto ridotte di dati, il compilatore XML di Android può produrre per te rappresentazioni binarie molto efficienti a cui puoi accedere proprio come XML. D'altra parte, se i dati sono molto grandi e hai bisogno di query arbitrarie, mi aspetto che SQLlite vinca prestazioni (oltre che flessibilità). Un piccolo benchmark dovrebbe essere facile da scrivere e ti darebbe una buona idea dei compromessi di base coinvolti.

I file flat sarebbero l'ultima opzione, imo, ma potrebbero funzionare se il file non è molto grande.

Se si definisce l'efficienza come (meno memoria, velocità, dimensioni, ecc.), un file piatto o delimitato sarà più veloce da caricare e salvare.

Tuttavia, le persone usano XML perché sono disposte a scambiare parte di quella velocità per una maggiore flessibilità e facilità d'uso di XML.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top