Zapis macierzy z użyciem XMLEncoder i 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
Moduł matrices – aktualny stan projektu = 033;