Mam plik JSON o wielkości około 1 MB przechowywany w folderze zasobów, który muszę ładować w mojej aplikacji przy każdym uruchomieniu. Odkryłem, że wbudowany analizator składni JSON (org.json) bardzo wolno analizuje plik, jednak po jego przeanalizowaniu mogę bardzo szybko uzyskać dostęp do danych i nimi manipulować. Odliczałem aż 7 lub 8 sekund od momentu, w którym kliknę aplikację do momentu, w którym zostało wywołane Działanie1, ale tylko kilka milisekund, aby przejść z Czynności1 do Czynności2, która zależy od danych przetworzonych z danych wczytanych Działanie1.Parsowanie ~ 1 MB JSON na Androida bardzo powolny
Czytam plik do pamięci i analizowania go za pomocą:
String jsonString = readFileToMemory(myFilename)
JSONArray array = new JSONArray(jsonString);
gdzie readFileToMemory (String) wygląda następująco:
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();
}
Czy ktoś ma jakieś sugestie, jak mogę przyspieszyć do początkowego ładowania i parsowania danych? Czy powinienem maskować cały proces za ekranem ładowania?
Istnieje mikro optymalizacje można uczynić , jak 'data.ensureCapacity (stream.available())' i tworzenie fragmentów 8K lub 64K, itp., ale tak naprawdę byłoby lepiej byłoby serializować dane lub zapisać je do tabeli SQL po parsowaniu, a następnie użyj tego, chyba że wykryjesz, że plik JSON został zaktualizowany. –