3

アプリケーション リソースとして静的な数値とテキスト値を使用したいと考えています。たとえば、私のデータは次のようになります。

Levels 5 First_Level 500 60 1 Second_Level 500 80 1 Third_Level 200 60 1 Fourth_Level 130 30 2 Final_Level 100 30 3
... and another 300 lines...

データの形式と順序は事前定義されており、有効であることが保証されています。

で読み取ることができましたがjava.util.Scanner、Android では非常に遅く、10 KB のファイルを読み取るのに数分かかります。内部の正規表現ベースのパターンマッチングが原因で遅いです(トレースビューしたとき)。

それらを保存するためにどのような方法をお勧めしますか?

4

3 に答える 3

1

1 年以上の Android 開発の後、私はいくつかのオプションを知っています。

  1. 文字列、整数などを文字列/整数リソースとして保存します。orを配置し、 or<string name="mystring">My String</string><integer name="myint">123</integer>使用してそれらを参照します。欠点は、入れ子にすることができないため、構造化データの保存が困難になることです。R.string.mystringR.integer.myint
  2. の下の xml ファイルを使用しますres/xml。驚くべきことに、それらはバイナリー xml にコンパイルされ、整数、ブール値、浮動小数点数などをマシン形式に解析し、非常に迅速に読み取ることができます。を使用Resources#getXmlしてパーサーgetAttributeIntValue("attribute_name")を取得し、値を int として直接取得するなどのメソッドを使用します。
  3. Parcel-ed バイナリ ファイルを使用します。android.os.Parcelは、さまざまな型の値を格納する非常に高速な方法です。Parcelableそれをサポートするために、独自のデータ構造に実装できます。
于 2011-05-16T02:36:37.380 に答える
1

これを生データとしてresources/raw(CSV や TSV などで)保存し、 Resources.openRawResourceを使用して、InputStream を使用してそれを読み取ることができます。それはかなり速いはずです。

于 2010-01-11T09:35:38.733 に答える
1

オブジェクト配列リストに格納できます。そのオブジェクトは、Serializable を実装するだけです。

次に、ObjectOutputStream.writeObject(list) だけを作成し、後で readObject を使用します。

于 2010-01-11T08:03:16.670 に答える