Poprzedni artykułpreviousnextNastępny artykuł

XMLEncoder, XMLDecoder

Obiekty zbudowane z zachowaniem wymagań JavaBeans mogą być zapisane w pliku XML, a następnie odtworzone z tego pliku. W pliku XML zapisywane tylko te właściwości obiektu, których wartości są zmienione (różne od domyślnych).
Aby zapisać i odczytać możemy użyć metod writeXMLEncoder i writeXMLDecoder z klasy MatrixUtil.

public static void writeXMLEncoder(Matrix matrix, String path) {
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(path);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        XMLEncoder out = new XMLEncoder(fos);
        out.writeObject(matrix);
        out.flush();
        out.close();
    }
public static Matrix readXMLDecoder(String path) {
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(path);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        XMLDecoder dec = new XMLDecoder(fis);
        Matrix matrix = (Matrix) dec.readObject();
        dec.close();
        return matrix;
    }

W konstruktorze dodajemy adnotację:

@ConstructorProperties({"array"})

Jest to sygnał dla encodera aby uruchomić metodę setArray() i dane zwrócone przez tę metodę zapisać w obiekcie zapisanym w pliku.

XMLEncoder

Przykład w klasie Matrix046.

Klasa Matrix046
 double[][] arr = {{6, 2, 3}, {4, 7, 5}, {1, 9, 8}};
 Matrix matrix = new Matrix(arr);
MatrixUtil.writeXMLEncoder(matrix, 
         "matrices/assets/matrix4.xml");

Po uruchomieniu klasy w folderze matrices/assets pojawi się plik matrix4.xml. Po otwarciu pliku zobaczysz:
<?xml version=”1.0″ encoding=”UTF-8″?>
<java version=”13.0.1″ class=”java.beans.XMLDecoder”>
<object class=”matrices.Matrix” id=”Matrix0″>
<array class=”[D” length=”3″>
<void index=”0″>
<array class=”double” length=”3″>
<void index=”0″>
<double>6.0</double>
</void>
<void index=”1″>
<double>2.0</double>
</void>
<void index=”2″>
<double>3.0</double>
</void>
</array>
</void>
<void index=”1″>
<array class=”double” length=”3″>
<void index=”0″>
<double>4.0</double>
</void>
<void index=”1″>
<double>7.0</double>
</void>
<void index=”2″>
<double>5.0</double>
</void>
</array>
</void>
<void index=”2″>
<array class=”double” length=”3″>
<void index=”0″>
<double>1.0</double>
</void>
<void index=”1″>
<double>9.0</double>
</void>
<void index=”2″>
<double>8.0</double>
</void>
</array>
</void>
</array>
<void id=”doubleArrayArray0″ property=”array”/>
<void property=”array”>
<object idref=”doubleArrayArray0″/>
</void>
</object>
</java>

XMLDecoderr

Klasa Matrix047
Matrix matrix = MatrixUtil.readXMLDecoder(
          "matrices/assets/matrix4.xml");
matrix.printToConsole();

Po uruchomieniu klasy na konsoli pojawi się:

6.0 2.0 3.0 
4.0 7.0 5.0 
1.0 9.0 8.0 

Pliki do ściągnięcia

matrices033.zip
Moduł matrices – aktualny stan projektu = 033;