Bibliotheksmethoden zum Serialisieren und Deserialisieren
Die Klassen XMLEncoder und XMLDecoder im Package java.beans definieren Methoden zum Serialisieren und Deserialisieren von Beans: void writeObject(Object x)
Object readObject()
Die Konstruktoren der Klassen akzeptieren einen Bytestrom als Ziel beziehungsweise Quelle. XMLEncoder und XMLDecoder müssen mit Aufrufen von close geschlossen werden. Das Programm PlayersBeanIO serialisiert oder deserialisiert eine PlayersBean-Bean, abhängig von der Anzahl der Kommandozeilenargumente: import java.beans.*;
import java.io.*;
public class PlayersBeanIO {
public static void main(String... args) throws IOException {
PlayersBean players;
if(args.length == 1)
try(OutputStream output = new FileOutputStream(args[0]);
XMLEncoder encoder = new XMLEncoder(output)) {
PlayerBean max = new PlayerBean();
max.setName("Max");
max.setScore(5);
PlayerBean moritz = new PlayerBean();
moritz.setName("Moritz");
moritz.setScore(3);
players = new PlayersBean();
players.setPlayers(new PlayerBean[] {max, max});
encoder.writeObject(players);
}
else
try(InputStream input = new FileInputStream(args[0]);
XMLDecoder decoder = new XMLDecoder(input)) {
players = (PlayersBean)decoder.readObject();
}
System.out.println(players);
}
}
PlayersBeanIO.java: Schreiben und Lesen von Java-Beans als XML.
XML-Dokument als Serialisierungsformat
Die Aufrufe von writeObject und readObject unterscheiden sich nicht von denen der Object-Streams. Das Format der serialisierten Objekte ist allerdings vollkommen anders. Die XML-Coder verwenden ein lesbares, portables XML-Dokument (Kapitel ▶), im Gegensatz zum binären Format der Object-Streams. Das folgende Beispiel zeigt ein solches XML-Dokument: $ java PlayersBeanIO players.xml
[Max/5, Moritz/3]
$ java PlayersBeanIO players.xml read
[Max/5, Moritz/3]
$ cat players.xml
<?xml version="1.0" encoding="utf-8"?>
<java version="1.7.0" class="java.beans.XMLDecoder">
<object class="PlayersBean">
<void property="players">
<array class="PlayerBean" length="2">
<void index="0">
<object class="PlayerBean">
<void property="name">
<string>Max</string>
</void>
<void property="score">
<int>5</int>
</void>
</object>
</void>
<void index="1">
<object class="PlayerBean">
<void property="name">
<string>Moritz</string>
</void>
<void property="score">
<int>3</int>
</void>
</object>
</void>
</array>
</void>
</object>
</java>
Dieses Dokument enthält keine Information über den Aufbau der serialisierten Objekte, sondern nur deren Properties und Werte.