Tôi có một tệp JSON xấp xỉ 1MB được lưu trữ trong thư mục nội dung mà tôi cần tải trong ứng dụng của mình mỗi lần chạy. Tôi thấy rằng trình phân tích cú pháp JSON tích hợp (org.json) phân tích cú pháp tệp rất chậm, tuy nhiên khi nó được phân tích cú pháp, tôi có thể truy cập và thao tác dữ liệu rất nhanh. Tôi đã tính được khoảng 7 hoặc 8 giây kể từ thời điểm tôi nhấp vào ứng dụng vào thời điểm Activity1 được đưa lên, nhưng chỉ mất vài phần nghìn giây để chuyển từ Activity1 sang Activity2 phụ thuộc vào dữ liệu được xử lý từ dữ liệu được tải Hoạt động 1.Phân tích cú pháp ~ 1 MB JSON trên Android rất chậm
Tôi đang đọc các tập tin vào bộ nhớ và phân tích nó bằng cách sử:
String jsonString = readFileToMemory(myFilename)
JSONArray array = new JSONArray(jsonString);
nơi readFileToMemory (String) trông như thế này:
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();
}
Có ai có bất cứ đề nghị để làm thế nào tôi có thể tăng tốc tăng tải và phân tích dữ liệu ban đầu? Tôi có nên che giấu toàn bộ quá trình đằng sau màn hình tải không?
Có vi optimisations bạn có thể làm , như 'data.ensureCapacity (stream.available())' và tạo các đoạn 8K hoặc 64K của bạn, v.v., nhưng thực sự điều tốt hơn sẽ là nối tiếp dữ liệu của bạn hoặc lưu nó vào một bảng SQL sau khi phân tích cú pháp, sau đó sử dụng nó trừ khi bạn phát hiện rằng tệp JSON đã được cập nhật. –