我的资产文件夹中存储了大约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();
}
有没有人对如何加快数据的初始加载和解析有任何建议?我是否应该屏蔽加载屏幕后面的整个过程?
答案 0 :(得分:8)
JSONObject
- 来自json.org的那个,是用于解析JSON的最简单的API。然而,它具有成本 - 性能。我已经用JSONObject,Gson和Jackson做了大量的实验。似乎无论你做什么,JSONObject(以及JSONArray)都是最慢的。请切换到Jackson或Gson。
这是两个
的相对表现(最快) Jackson > Gson >> JSONObject
(最慢)
答案 1 :(得分:2)
您应该创建一个SQLite表来存储数据,并在应用程序第一次运行时将其从JSON移动到SQL。另外一个好处是,这使得数据更易于搜索,并使您可以从应用程序中修改数据。