Android: É mais eficiente usar um arquivo de texto ou um arquivo XML para armazenar dados estáticos

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

Pergunta

Eu tenho alguns dados de referência em um arquivo de texto (~ 5 MB) que deseja usar com o aplicativo android poder.

O arquivo está no 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

O que eu quero saber é a forma mais eficiente (menos memória, rápido, tamanho etc.) para usar esse arquivo dentro do meu aplicativo.

a.) Devo salvar o arquivo como um recurso cru e abrir e ler o arquivo inteiro, sempre que eu preciso de uma determinada linha.

b.) Devo converter o arquivo para XML e usar XPath para consultar o arquivo sempre que eu preciso pesquisar um valor

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

c.) Devo apenas copiar e colar o arquivo inteiro como uma matriz de cadeia estática na aplicação e uso isso.

... quaisquer outras sugestões são bem vindas.

[EDIT] Eu também precisará procurar este arquivo e salto para arbitrária palavras-chave por exemplo "Linha 1-A".

Foi útil?

Solução

XML sempre demoram mais tempo a ler do que arquivos de texto ou CSV simples. O XML lhe dá na troca é uma forma altamente estruturada e confiável de armazenar e recuperar dados. Os arquivos XML são, como você pode ver nos exemplos acima, um bom 2-3x maior do que os dados que eles contêm realmente.

Se você tem certeza de que você nunca vai se deparar com o personagem "delimitador" em seu arquivo de texto simples, então isso provavelmente funcionaria muito bem, puramente do ponto de vista da velocidade de arquivo.

Outras dicas

Você não forneceram informações suficientes para responder a esta pergunta. No entanto, se eu fosse um homem de apostas, a resposta é, provavelmente, "nenhuma das anteriores".

Eu também precisará procurar esse arquivo

O que isso significa? Você está procurando pela chave corda? Por alguma expressão regular? Por uma string de consulta em estilo SQL onde certas partes de uma linha são interpretados como números inteiros contra cordas contra alguma outra coisa? Por uma série de estilo de pesquisa do Google?

Cada uma dessas respostas, provavelmente, determina uma tecnologia diferente para armazenar essas informações.

Além disso, vou precisar de ... salto para linhas arbitrárias.

Por quê? Como você está determinando que "arbitrária linhas" você é "salto" ing para: chave? número da linha? deslocamento de byte? Procurar Resultados? outra coisa?

E, claro, há outras questões, como:

  • Com que freqüência esses dados atualizados?
  • Como é que esta dados atualizados: nova versão do aplicativo? baixar o arquivo inteiro? baixar deltas / diffs? outra coisa?
  • É o ASCII dados? UTF-8? Outra coisa?

e assim por diante.

Algo que o tamanho que deve ser pesquisado em cima sugere "usar um banco de dados SQLite", mas algumas das outras respostas pode abster-se de que a solução.

Se você está falando de quantidades muito pequenas de dados, o compilador XML Android pode produzir representações binárias muito eficiente para você que você pode acessar apenas como XML. Por outro lado, se os dados é muito grande em tudo, e você precisa de consultas arbitrárias, eu esperaria SqlLite para vencer no desempenho (bem como flexibilidade). Uma pequena referência deve ser fácil de escrever e lhe daria uma boa idéia de como as compensações básicas envolvidas.

Flat-arquivos seria uma última opção, imo, mas poderia funcionar se o arquivo não é muito grande.

Se você definir a eficiência como (menos memória, rápido, tamanho etc.), um apartamento ou arquivo delimitado será mais rápido para carregar e salvar.

No entanto, as pessoas usam XML, porque eles estão dispostos a trocar alguns de que a velocidade de flexibilidade maior do XML e facilidade de uso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top