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

Tengo algunos datos de referencia en un archivo de texto (~ 5 MB) que quiero usar con la aplicación Android podría.

El archivo es del 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, rápido, tamaño, etc) para utilizar este archivo dentro de mi aplicación.

a.) Debo guardar el archivo como un recurso sin formato y abrir y leer todo el archivo siempre que necesite una cierta línea.

b.) Debo convertir el archivo a XML y utilizar XPath para consultar el archivo cuando sea necesario buscar un valor

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

c.) Debo copiar y pegar todo el archivo como una matriz de cadena estática en la aplicación y utilizarlo.

… cualquier otra sugerencia es bienvenida.

[EDITAR] También necesitaré buscar en este archivo y saltar a palabras clave arbitrarias, por ejemplo, "línea 1a".

XML siempre tomará más tiempo para leer que los archivos de texto simple o CSV. Lo que XML le da en el tradeoff es una forma altamente estructurada y confiable de almacenar y recuperar datos. Los archivos XML son, como se puede ver en los ejemplos anteriores, una buena 2-3 veces mayor que los datos que realmente contienen.

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

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

También necesitaré buscar en este archivo

¿Qué significa esto? Usted está buscando con una clave de cadena? ¿Por alguna expresión regular? Por una cadena de consulta de estilo SQL donde ciertas porciones de una línea se interpretan como enteros versus cadenas versus algo más? ¿Por una cadena de estilo de búsqueda de Google?

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

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

¿Por qué? ¿Cómo determinas cuáles "líneas arbitrarias" estás "saltando" a: clave? ¿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 ASCII? UTF-8? ¿Algo más?

y así.

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

Si usted está hablando de cantidades muy pequeñas de datos, el compilador de Android XML puede producir representaciones binarias muy eficaces para usted que puede acceder como XML. Por otro lado, si los datos son muy grandes en absoluto, y necesita consultas arbitrarias, esperaría SQLlite para ganar en el rendimiento (así como la flexibilidad). Un pequeño punto de referencia debe ser fácil de escribir y le daría una buena idea en cuanto a los compromisos básicos involucrados.

Flat-files sería una última opción, imo, pero podría 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 para cargar y guardar.

Sin embargo, la gente usa XML porque está dispuesta a intercambiar algo de esa velocidad por la mayor flexibilidad y facilidad de uso de XML.

  • Eclipse androide utilizando recurso de cadena para el tamaño de texto en diseños
  • Android: Acceso a recursos sin una actividad o referencia de contexto
  • Acceso a contenidos de R.string usando una variable para representar el nombre del recurso
  • Android: ¿Cómo combinar Spannable.setSpan con String.format?
  • ¿Cómo enlazar activos de android a escritorio en libgdx?
  • Android: ¿Cómo agregar R.raw al proyecto?
  • Android Soundpool Load (String path, int priority)
  • Dónde colocar un archivo XML que contiene datos en una aplicación de Android
  • ¿Cómo importar recursos de un proyecto de biblioteca?
  • Cambio de locale: ¿Forzar la actividad a recargar recursos?
  • Android: ¿Cómo liberar recursos cuando termina la aplicación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.