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

标签 java android json performance

我的 Assets 文件夹中存储了一个大约 1MB 的 JSON 文件,每次运行时我都需要将其加载到我的应用程序中。我发现内置的 JSON 解析器 (org.json) 解析文件的速度非常慢,但是一旦解析完成,我就可以非常快速地访问和操作数据。从我点击应用程序到启动 Activity1 的那一刻,我已经计算出多达 7 或 8 秒,但从 Activity1 到 Activity2 只需几毫秒,这取决于从加载的数据处理的数据 Activity 一。

我正在将文件读入内存并使用以下方法解析它:

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();
}

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

最佳答案

JSONObject —— 来自 json.org 的对象,是用于解析 JSON 的最简单的 API。然而,它是有代价的——性能。我对 JSONObject、Gson 和 Jackson 进行了大量实验。似乎无论您做什么,JSONObject(以及 JSONArray)都将是最慢的。请切换到 Jackson 或 Gson。

这是两者的相对性能

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

引用:
- Jackson
- Gson

关于java - 在 Android 上解析 ~1 MB JSON 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12170552/

相关文章:

java - 在android中使用sharedpreferences保存微调器状态

android - RecyclerView.Adapter 中 getItemId() 的正确实现方式

android - 如何在android中删除webview中的缓存?

java - 如何在java中使用 "ls *.c"命令?

java - Eclipse 在哪里存储首选项?

java - Java for distcp中的Map Reduce作业

java - 如何根据使用 Java 解析 HashMap 的顺序对 HashMap 进行排序?

java - 如何从异步任务中的 JSON 查询返回多个字符串?

java - JSON 格式说明换行符

javascript - 我可以通过回调添加 getJSON 的 did() 函数吗?