ich zuvor mit outputStream.writeObject und Serializable mit Standard-Schreib-/Lesegerät zum Speichern von Objektdaten. Wegen Problemen mit der Code-Nachhaltigkeit habe ich etwas anderes gesucht. Dies ist das Ergebnis. Dieser BufferedWriter ist obligatorisch, andernfalls fällt die Schreibgeschwindigkeit achtmal ab. Beachten Sie, dass die UTF-8-Deklaration default encoding of Json ist. Nicht sicher, ob es nicht sicher ist.
Beispiel:
private void saveJson(Object object, Type type, String directory, String fileName) {
File file = new File(getApplicationContext().getDir(directory, Context.MODE_PRIVATE),
fileName);
OutputStream outputStream = null;
Gson gson = new GsonBuilder().enableComplexMapKeySerialization().setPrettyPrinting()
.create();
try {
outputStream = new FileOutputStream(file);
BufferedWriter bufferedWriter;
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream,
StandardCharsets.UTF_8));
} else {
bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
}
gson.toJson(object, type, bufferedWriter);
bufferedWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
if (DEBUG) Log.e(saveJson, "saveUserData, FileNotFoundException e: '" + e + "'");
} catch (IOException e) {
e.printStackTrace();
if (DEBUG) Log.e(saveJson, "saveUserData, IOException e: '" + e + "'");
} finally {
if (outputStream != null) {
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
if (DEBUG) Log.e(saveJson, "saveUserData, finally, e: '" + e + "'");
}
}
}
}
private Object loadJson(Type type, String directory, String fileName) {
Object jsonData = null;
File file = new File(getApplicationContext().getDir(directory, Context.MODE_PRIVATE),
fileName);
InputStream inputStream = null;
Gson gson = new GsonBuilder().enableComplexMapKeySerialization().setPrettyPrinting()
.create();
try {
inputStream = new FileInputStream(file);
InputStreamReader streamReader;
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
streamReader = new InputStreamReader(inputStream,
StandardCharsets.UTF_8);
} else {
streamReader = new InputStreamReader(inputStream, "UTF-8");
}
jsonData = gson.fromJson(streamReader, type);
streamReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
if (DEBUG) Log.e(TAG, "loadJson, FileNotFoundException e: '" + e + "'");
} catch (IOException e) {
e.printStackTrace();
if (DEBUG) Log.e(TAG, "loadJson, IOException e: '" + e + "'");
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
if (DEBUG) Log.e(TAG, "loadJson, finally, e: '" + e + "'");
}
}
}
return jsonData;
}
wo Type zum Beispiel:
Type type = new TypeToken<Map<String, Object>>() { }.getType();
, weil Sie auf die gleiche Datei in jeder Schleifeniterationslatenzzeit gerade schreiben. Sie müssen die _list_ in die Datei schreiben, nicht jedes Element. –
, wenn ich Sie verstehen, ich bewege die Zeile "JsonWriter writer = new JsonWriter (neue Filewriter (" C: \\ file.json "));" vor der Zeile für, aber das gleiche Ergebnis –
Dann verstehst du nicht. Sie müssen die 'Liste' schreiben! Gson wird es für JSON ganz einfach selbst serialisieren. –