PO Serializacja - ćwiczenia
Zadanie 1
Rozszerz klasę Osoba, aby posiadała dwa adresy – adres zameldowania i adres zamieszkania. W klasie SerializacjTest ustaw Zygmuntowi Kotkowi oba rodzaje adresów na alternatywy4. Sprawdź, że po deserializacji oba adresy są nadal jednym obiektem.
Rozwiązanie
Zadanie 2
Używając podanej poniżej klasy ElementListy przygotuj trzyelementowy cykl i zserializuj go do pliku, a następnie zdeserializuj. Sprawdź, czy rzeczywiście jeżeli przed serializacją jakiś obiekt był przypisany na kilka różnych referencji, to po deserializacji nadal będzie na te referencje przypisany jeden obiekt.
class ElementListy implements Serializable { String wartość; ElementListy następny, poprzedni; ElementListy(String wartość) { this.wartość = wartość; System.out.println("wywołanie konstruktora klasy ElementListy"); } protected String memAddress() { String adrPamięć = super.toString(); return adrPamięć.substring(adrPamięć.indexOf('@')); } public String toString() { String adrPamięć = super.toString(); return adrPamięć+"(" + wartość + ", " + następny.memAddress() + ", " + poprzedni.memAddress() + ")"; } public ElementListy getNastępny() { return następny; } public ElementListy getPoprzedni() { return poprzedni; } public void setPoprzedni(ElementListy poprzedni) { this.poprzedni = poprzedni; } public void setNastępny(ElementListy następny) { this.następny = następny; } }
Rozwiązanie
Zadanie 3
Przygotuj klasę GłębokaKopia, której statyczna metoda kopiuj(Object) będzie wykonywała w pamięci głęboką (kopię całego grafu) kopię obiektu przekazanego jej jako parametr i zwracała ją jako wynik. Użyj napisanej klasy do wykonania głębokiej kopi cyklu el1używanego w rozwiązaniu poprzedniego zadania.
Rozwiązanie
Zadanie 4
W metodzie main() klasy TestSerializacji po zserializowaniu obiektu kotek, ale przed zserializowaniem obiektu kołek zmień wartość adresu alternatywy4. Sprawdź czy zmiana jest widoczna po desrializacji. Ten sam eksperyment wykonaj resetując pamięć podręczną strumienia ObjectOutputStream pomiędzy zapisem kolejnych grafów.
Rozwiązanie przed zresetowaniem pamięci podręcznej
Rozwiązanie po zresetowaniu pamięci podręcznej
Zadanie 5
Wymyśl sposób na zabronienie wykonywania serializacji na danej klasie. Niech każda próba serializacji zgłasza wyjątek. Podaj przykład tak zabezpieczonej klasy oraz spróbuj ją zserializować.
Wskazówka
Rozwiązanie
Zadanie 6
Wymyśl sposób na zabronienie wykonywania serializacji na danej klasie i wszystkich jej podklasach. Podaj przykład tak zabezpieczonej klasy oraz spróbuj ją zserializować.
Wskazówka
Rozwiązanie