Android:テキストファイルまたはXMLファイルを使用して静的データを保存する方が効率的ですか
-
06-07-2019 - |
質問
Might 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。)コピー&amp;ファイル全体を静的な文字列配列としてアプリケーションに貼り付けて使用します。
...その他の提案は歓迎します。
[編集] また、このファイルを検索して、任意のキーワードにジャンプする必要があります。 &quot; line 1a&quot;。
解決
XMLは、単純なテキストファイルまたはCSVファイルよりも常に読み取りに時間がかかります。トレードオフでXMLが提供するものは、データを格納および取得するための高度に構造化された信頼性の高い方法です。上記の例でわかるように、XMLファイルは、実際に含まれているデータの2〜3倍の大きさです。
&quot;区切り文字&quot;に遭遇することは決してないと確信している場合単純なテキストファイルの文字を使用すると、純粋にファイル速度の観点から見れば、おそらく問題なく動作します。
他のヒント
この質問に答えるのに十分な情報を提供していません。ただし、私が賭け人だった場合、答えはおそらく「上記のどれでもない」です。
このファイルも検索する必要があります
これはどういう意味ですか?文字列キーで検索していますか?正規表現で?行の特定の部分が整数対文字列対何かと解釈されるSQLスタイルのクエリ文字列によって? Googleの検索スタイルの文字列ですか?
これらの回答のそれぞれは、おそらくこの情報を保存するための異なるテクノロジーを指示しています。
また、...任意の行にジャンプする必要があります。
なぜですか?どの「任意の行」をどのように判断していますかあなたは「ジャンプ」しています:キー?行番号?バイトオフセット?の検索結果?他に何か?
そして、もちろん、次のような他の質問があります:
- このデータはどのくらいの頻度で更新されますか?
- このデータの更新方法:アプリの新しいバージョン?ファイル全体をダウンロードしますか?デルタ/差分をダウンロードしますか?他に何か?
- データはASCIIですか? UTF-8?他に何か?
など。
検索する必要があるサイズは、「SQLiteデータベースを使用する」ことを示唆していますが、他の回答のいくつかはそのソリューションから遠ざかる可能性があります。
非常に少量のデータについて話している場合、Android XMLコンパイラは、XMLのようにアクセスできる非常に効率的なバイナリ表現を生成できます。一方、データが非常に大きく、任意のクエリが必要な場合、SQLliteがパフォーマンス(および柔軟性)で勝つことを期待しています。小さなベンチマークは簡単に書くことができ、関連する基本的なトレードオフに関して良いアイデアを与えるでしょう。
フラットファイルは最後のオプションであるimoですが、ファイルがそれほど大きくない場合は機能します。
効率を(メモリ不足、高速、サイズなど)と定義すると、フラットファイルまたは区切りファイルのロードと保存が高速になります。
ただし、人々はXMLを使用します。なぜなら、XMLの柔軟性と使いやすさの代償として、その速度の一部を引き換えに喜んでいるからです。