Programmieren mit Java IIhttp://sol.cs.hm.edu/4129Inhaltsverzeichnis
2. Serialisierung2.3 JavaBeans
2.3.2 XMLEncoder und XMLDecoder
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.[23]
Sie implementieren das Interface AutoCloseable.
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:[24]
Die ersten beiden Aufrufe benutzen toString-Methoden der Klassen PlayerBean und PlayersBean, die im oben abgedruckten Code weggelassen sind.
$ 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.