Android: ¿Es más eficiente usar un archivo de texto o un archivo XML para almacenar datos estáticos?

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

Pregunta

Tengo algunos datos de referencia en un archivo de texto (~ 5MB) que quiero usar con una poderosa aplicación de Android.

El archivo tiene el 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

Lo que quiero saber es la forma más eficiente (menos memoria, rapidez, tamaño, etc.) de usar este archivo dentro de mi aplicación.

a.) ¿Debo guardar el archivo como un recurso sin procesar y abrir y leer todo el archivo cada vez que necesite una línea determinada?

b.) ¿Debo convertir el archivo a XML y usar XPath para consultar el archivo cada vez que necesite buscar un valor

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

c.) ¿Debo copiar & amp; pegue todo el archivo como una matriz de cadenas estáticas en la aplicación y úsela.

... cualquier otra sugerencia es bienvenida.

[EDITAR] También tendré que buscar este archivo y saltar a palabras clave arbitrarias, p. " línea 1a " ;.

¿Fue útil?

Solución

XML siempre tardará más en leerse que los archivos de texto o CSV simples. Lo que XML le brinda en la compensación es una forma altamente estructurada y confiable de almacenar y recuperar datos. Los archivos XML son, como puede ver en los ejemplos anteriores, 2-3 veces más grandes que los datos que realmente contienen.

Si está seguro de que nunca se encontrará con el delimitador " carácter en su archivo de texto simple, entonces eso probablemente funcionaría bien, puramente desde una perspectiva de velocidad de archivo.

Otros consejos

No ha proporcionado suficiente información para responder esta pregunta. Sin embargo, si fuera un apostador, la respuesta es probablemente "ninguna de las anteriores".

  

También necesitaré buscar este archivo

¿Qué significa esto? ¿Está buscando por alguna tecla de cadena? ¿Por alguna expresión regular? ¿Por una cadena de consulta de estilo SQL donde ciertas partes de una línea se interpretan como enteros versus cadenas versus otra cosa? ¿Por una cadena de estilo de búsqueda de Google?

Cada una de esas respuestas probablemente dicta una tecnología diferente para almacenar esta información.

  

También necesitaré ... saltar a líneas arbitrarias.

¿Por qué? ¿Cómo estás determinando qué "líneas arbitrarias"? ¿Estás saltando a la tecla? ¿número de línea? byte offset? ¿Resultados de la búsqueda? algo más?

Y, por supuesto, hay otras preguntas, como:

  • ¿Con qué frecuencia se actualizan estos datos?
  • ¿Cómo se actualizan estos datos: nueva versión de la aplicación? descargar el archivo completo? descargar deltas / diffs? algo más?
  • ¿Los datos son ASCII? UTF-8? ¿Algo más?

y así sucesivamente.

Algo de ese tamaño que debe buscarse sugiere "usar una base de datos SQLite", pero algunas de las otras respuestas podrían alejarse de esa solución.

Si está hablando de cantidades muy pequeñas de datos, el compilador XML de Android puede producir representaciones binarias muy eficientes para que pueda acceder al igual que XML. Por otro lado, si los datos son muy grandes y necesita consultas arbitrarias, esperaría que SQLlite ganara en rendimiento (así como flexibilidad). Un pequeño punto de referencia debería ser fácil de escribir y le daría una buena idea de las compensaciones básicas involucradas.

Los archivos planos serían una última opción, en mi opinión, pero podrían funcionar si el archivo no es muy grande.

Si define la eficiencia como (menos memoria, rápido, tamaño, etc.), un archivo plano o delimitado será más rápido de cargar y guardar.

Sin embargo, las personas usan XML porque están dispuestas a cambiar parte de esa velocidad por la mayor flexibilidad y facilidad de uso de XML.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top