6

約 1MB の JSON ファイルが assets フォルダーに保存されており、アプリを実行するたびに読み込む必要があります。組み込みの JSON パーサー (org.json) によるファイルの解析は非常に遅いことがわかりましたが、一度解析すると、データに非常に迅速にアクセスして操作できます。アプリをクリックしてから Activity1 が起動するまでに 7 ~ 8 秒を数えましたが、Activity1 から Activity2 に移動するのに数ミリ秒しかかかりません。これは、読み込まれたデータから処理されたデータに依存します。活動1.

ファイルをメモリに読み込み、次を使用して解析しています。

String jsonString = readFileToMemory(myFilename)
JSONArray array = new JSONArray(jsonString);

readFileToMemory(String) は次のようになります。

private String readFileToMemory(String filename) {
    StringBuilder data = new StringBuilder();       
    BufferedReader reader = null;
    try {
        InputStream stream = myContext.getAssets().open(filename);
        reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
        int result = 0;
        do
        {
            char[] chunk = new char[512];
            result = reader.read(chunk);
            data.append(chunk);
        }
        while(result != -1);

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return data.toString();
}

データの初期読み込みと解析を高速化する方法について何か提案はありますか? ロード画面の背後にあるプロセス全体をマスクする必要がありますか?

4

2 に答える 2

8

JSONObject-- json.org のものは、JSON の解析に使用する最も単純な API です。ただし、コスト、つまりパフォーマンスが伴います。私は、JSONObject、Gson、および Jackson を使用して広範な実験を行いました。何をしても、JSONObject (したがって JSONArray) が最も遅くなるようです。Jackson または Gson に切り替えてください。

両者の相対的なパフォーマンスは次のとおりです。

(最も速い) Jackson > Gson >> JSONObject(最も遅い)

参照:
-ジャクソン
- Gson

于 2012-08-29T03:50:27.140 に答える
2

データを格納する SQLite テーブルを作成し、アプリの初回実行時にデータを JSON から SQL に移動する必要があります。追加の利点として、これによりデータの検索が容易になり、アプリ内からデータを変更できるようになります。

于 2012-08-29T03:46:21.100 に答える