Java Android上解析~1MB JSON的速度非常慢
我有一个大约1MB的JSON文件存储在我的资产文件夹中,我需要在每次应用程序运行时加载该文件。我发现内置的JSON解析器(org.JSON)解析文件的速度非常慢,但是一旦解析完成,我就可以非常快速地访问和操作数据。我计算了从点击应用程序到启动Activity1的时间长达7或8秒,但从Activity1到Activity2的时间仅为几毫秒,这取决于Activity1中加载的数据所处理的数据 我正在将文件读入内存并使用以下方法对其进行解析: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
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吗?可以。请阅读这里的文档。杰克逊链接断了