我的 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
(最慢)
关于java - 在 Android 上解析 ~1 MB JSON 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12170552/