在Android上解析~1 MB JSON非常慢

时间:2012-08-29 03:40:40

标签: java android json performance

我的资产文件夹中存储了大约1MB的JSON文件,每次运行时我都需要在我的应用程序中加载。我发现内置的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();
}

有没有人对如何加快数据的初始加载和解析有任何建议?我是否应该屏蔽加载屏幕后面的整个过程?

2 个答案:

答案 0 :(得分:8)

JSONObject - 来自json.org的那个,是用于解析JSON的最简单的API。然而,它具有成本 - 性能。我已经用JSONObject,Gson和Jackson做了大量的实验。似乎无论你做什么,JSONObject(以及JSONArray)都是最慢的。请切换到Jackson或Gson。

这是两个

的相对表现

(最快) Jackson > Gson >> JSONObject (最慢)

参见:
  - Jackson
  - Gson

答案 1 :(得分:2)

您应该创建一个SQLite表来存储数据,并在应用程序第一次运行时将其从JSON移动到SQL。另外一个好处是,这使得数据更易于搜索,并使您可以从应用程序中修改数据。