2009-07-31 6 views
3

私は、おそらくアンドロイドアプリケーションで使用したいテキストファイル(〜5MB)にいくつかの参照データを持っています。Android:静的データを格納するためにテキストファイルまたはXMLファイルを使用する方が効率的ですか

ファイルは、形式は次のとおりです。

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 

私が知りたいのは何私のアプリケーション内でこのファイルを使用するための最も効率的な方法(少ないメモリ、高速で、サイズなど)です。

)。ファイルを生のリソースとして保存し、特定の行が必要なときはいつでもファイル全体を開いて読みとるべきですか?

bが。)私は、XMLにファイルを変換し、私は価値

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

Cをルックアップする必要がある、これまでときに、ファイルを照会するためにXPathを使用する必要があります。)私はちょうど&としてファイル全体をコピー&ペーストすべきアプリケーション内の静的文字列配列を使用してそれを使用します。

...他の提案は歓迎します。

[編集] このファイルを検索して任意のキーワードにジャンプする必要があります。 "ライン1a"。

答えて

3

XMLは、単純なテキストまたはCSVファイルよりも読み取りに常に時間がかかります。 XMLは、構造化され、信頼性の高い方法でデータを格納および取得する方法です。 XMLファイルは、上記の例のように、実際に格納されているデータよりも2〜3倍大きくなっています。

シンプルなテキストファイルの "区切り文字"に決して遭遇しないと確信しているのであれば、純粋にファイルスピードの観点からはうまくいくでしょう。

+1

xmlが非効率であるという前提は、Androidプラットフォームではほとんど無効です。おそらく、彼はアンドロイド・リソース・コンパイラーを使用して、これをXMLの(非常に効率的な)アンドロイド固有のバイナリー表現にコンパイルします。 – jsight

0

効率を(メモリ、高速、サイズなどの少ない)と定義すると、フラットまたは区切りファイルの読み込みと保存が高速になります。

しかし、人々はXMLを使用しています。なぜなら、XMLの柔軟性と使いやすさのためにその速度の一部を喜んで使うからです。

3

この質問に答えるための十分な情報を提供していません。しかし、もし私が賭けの男だったら、答えはおそらく "上記のどれも"ではありません。

私はまた、このファイルに

を検索する必要があります。これは何を意味するのでしょうか?文字列キーで検索していますか?いくつかの正規表現によって? SQLスタイルのクエリ文字列によって、行の特定の部分が文字列対文字列のどちらかと解釈されますか? Google検索スタイルの文字列ですか?

これらの回答のそれぞれは、おそらくこの情報を保存するための別の技術を規定しています。

また、任意の行にジャンプする必要があります。

なぜですか?どの「どのような線」を「ジャンプ」しているのか、どのように判断していますか?行番号?バイトオフセット?の検索結果?何か?

  • はどのくらいの頻度でこのデータが更新されます。

    はまた、当然のことながら、同様に、他の質問がありますか?

  • このデータはどのように更新されましたか?新しいバージョンのアプリですか?ファイル全体をダウンロードしますか? deltas/diffsをダウンロードしますか?何か?
  • データはASCIIですか? UTF-8?他に何か?

など。

検索する必要があるサイズは、「SQLiteデータベースを使用する」ことを示唆していますが、他の回答の中にはその解決策から離れるものがあります。

+0

これはあまり更新されない参照ファイルです。 – Tawani

+0

"任意の行にジャンプ"(例: "15 | e" – Tawani

1

非常に少量のデータについて話している場合、Android XMLコンパイラは、XMLのようにアクセスできる非常に効率的なバイナリ表現を生成できます。一方、データが非常に大きく、任意のクエリが必要な場合、SQLliteはパフォーマンス(柔軟性だけでなく)に勝つことが期待されます。小さなベンチマークは簡単に書くことができ、関連する基本的なトレードオフについては良いアイデアが得られます。

最後のオプションはimoですが、ファイルのサイズがそれほど大きくない場合は機能します。

+0

私は大規模なデータのためにもsqliteに行くだろう! Sqliteのデータを簡単にインデックスすることができます。 – tuinstoel

関連する問題