Java Android上解析~1MB JSON的速度非常慢

Java Android上解析~1MB JSON的速度非常慢,java,android,json,performance,Java,Android,Json,Performance,我有一个大约1MB的JSON文件存储在我的资产文件夹中,我需要在每次应用程序运行时加载该文件。我发现内置的JSON解析器(org.JSON)解析文件的速度非常慢,但是一旦解析完成,我就可以非常快速地访问和操作数据。我计算了从点击应用程序到启动Activity1的时间长达7或8秒,但从Activity1到Activity2的时间仅为几毫秒,这取决于Activity1中加载的数据所处理的数据 我正在将文件读入内存并使用以下方法对其进行解析: String jsonString = readFileT

我有一个大约1MB的JSON文件存储在我的资产文件夹中,我需要在每次应用程序运行时加载该文件。我发现内置的JSON解析器(org.JSON)解析文件的速度非常慢,但是一旦解析完成,我就可以非常快速地访问和操作数据。我计算了从点击应用程序到启动Activity1的时间长达7或8秒,但从Activity1到Activity2的时间仅为几毫秒,这取决于Activity1中加载的数据所处理的数据

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

String jsonString = readFileToMemory(myFilename)
JSONArray array = new JSONArray(jsonString);
其中readFileToMemory(字符串)如下所示:

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

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

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

JSONObject
——来自json.org的API是解析json最简单的API。然而,它也带来了成本——性能。我用JSONObject、Gson和Jackson做了大量的实验。看起来无论你做什么,JSONObject(因此JSONArray)都是最慢的。请换成杰克逊或格森

下面是这两种方法的相对性能

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

参考:
-

-

是的,可以尝试使用SQLite或将JSON拆分为小的JSON。您可以进行一些微优化,如
数据。ensureCapacity(stream.available())
和将数据块设置为8K或64K等,但真正更好的方法是序列化数据或在解析后将其保存到SQL表中,然后使用它,除非检测到JSON文件已经更新。Jackson可以在没有POJO的情况下使用吗?就像现在一样,我正在使用JSONObject,一个接一个地读取json文件的格式,并进行db插入(无类)。我可以用同样的方法逐个读取json对象/数组并解析、插入db吗?可以。请阅读这里的文档。杰克逊链接断了