Wie kann man Daten serialisieren?
Das Problem besteht darin, dass z.B. Objekte wiederum
Objekte enthalten können, die mitgesichert werden
müssen. Dies erfolgt bei der Serialisierung in
Byteform in einer Datei, die üblicherweise die
Dateiendung *.ser
besitzt.
import java.io.*;
import java.util.ArrayList;
public class ObjectSchreibenClass {
public static void main(String[] args) {
String datnam = "/Users/joecze/Downloads/myObjs.ser";
ArrayList<Object> objArrList = read(datnam);
write(objArrList, datnam);
}
@SuppressWarnings("unchecked")
public static ArrayList<Object> read(String datnam) {
ArrayList<Object> objArrList = null;
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(datnam))) {
objArrList = (ArrayList<Object>) in.readObject();
} catch (FileNotFoundException ex) {
System.out.println("Speicherdatei (noch) nicht vorhanden!");
} catch (Exception ex) {
System.out.println(ex);
}
return objArrList;
}
public static void write(ArrayList<Object> objArrList, String datnam) {
if (objArrList == null)
objArrList = new ArrayList<Object>();
objArrList.add(new String("ArrayListgroesse: " + objArrList.size()));
System.out.println(objArrList);
try (ObjectOutputStream aus = new ObjectOutputStream(new FileOutputStream(datnam))) {
aus.writeObject(objArrList);
} catch (IOException ex) {
System.out.println(ex);
}
}
}
Im Zentrum der Serialisierung steht die Klasse ObjectOutputStream
mit ihrer Methode writeObject()
, die
rekursiv die vorhandenen Objektzustände
durchläuft und sie an einen FileOutputStream
weiterleitet.
Im Beispiel wird zunächst in der Methode read()
eine ArrayList
erzeugt und mit null
initialisiert. Sie
wird aus der angegebenen am angegebenen Pfad abgelegten
Datei ausgelesen und zurückgegeben. Da der
ausgelesene Typ nicht überprüft werden kann, jedoch zu ArrayList
gecastet wird, wird der Methode die Annotation
"unchecked" vorangestellt. War die Datei nicht vorhanden
oder leer, so ist das ArrayList
-Objekt an
dieser Stelle noch null
.
Der Methode write()
werden dann die ArrayList
und der
Pfadstring übergeben. Bei Nichtexistenz der ArrayList
wird diese neu instanziert. Ihr wird zu den dort evtl.
gespeicherten Objekten ein String und die
Größenangabe der vorhandenen Liste
hinzugefügt. Durch die o.a. Mechanismen wird sie
dann am angegebenen Pfad abgespeichert.
Ein Beispiel für die Serialisierung eines eigenen Referenztyps findet sich unter Modifikatoren - transient
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.