4

Android アプリケーションで使用したいテキスト ファイル (~5MB) に参照データがいくつかあります。

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

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

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

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

b.) ファイルを XML に変換し、XPath を使用して、値を検索する必要があるときにファイルをクエリする必要がありますか?

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

c.) アプリケーションでファイル全体を静的な文字列配列としてコピー & ペーストし、それを使用する必要があります。

...その他の提案は大歓迎です。

[編集] また、このファイルを検索して、任意のキーワード (たとえば、「1a 行目」) にジャンプする必要があります。

4

4 に答える 4

4

XML は、単純なテキストや CSV ファイルよりも読み取りに時間がかかります。XML がもたらすトレードオフは、高度に構造化された信頼性の高い方法でデータを保存および取得できることです。上記の例でわかるように、XML ファイルは、実際に含まれるデータよりも 2 ~ 3 倍大きくなります。

単純なテキスト ファイルで「区切り文字」文字に出くわすことがないと確信している場合は、純粋にファイル速度の観点から、おそらく問題なく動作するでしょう。

于 2009-07-31T17:42:02.750 に答える
3

この質問に答えるのに十分な情報が提供されていません。しかし、もし私が賭け屋だったら、答えはおそらく「上記のどれでもない」でしょう。

このファイルも検索する必要があります

これは何を意味するのでしょうか?文字列キーで検索していますか?正規表現で?行の特定の部分が整数、文字列、またはその他の何かとして解釈される SQL スタイルのクエリ文字列によって? Google 検索スタイルの文字列で?

これらの答えのそれぞれは、おそらく、この情報を保存するためのさまざまなテクノロジーを指示します。

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

なんで?どの「任意の行」に「ジャンプ」するかをどのように判断していますか: キー? 行番号?バイトオフセット?の検索結果?他の何か?

もちろん、他にも次のような質問があります。

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

等々。

検索が必要なサイズは「SQLite データベースを使用する」ことを示唆していますが、他の回答のいくつかはその解決策から遠ざかる可能性があります。

于 2009-07-31T18:29:18.253 に答える
1

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

フラットファイルは最後のオプションであるimoですが、ファイルがそれほど大きくない場合は機能する可能性があります。

于 2009-08-01T21:00:50.427 に答える
0

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

しかし、XML を使用するのは、XML の優れた柔軟性と使いやすさのために、その速度の一部を犠牲にすることを厭わないからです。

于 2009-07-31T17:47:11.740 に答える