Deserializacja w Java to proces odtwarzania obiektu z ciągu bajtów, który został wcześniej zserializowany (przekształcony w ciąg bajtów). Jest to kluczowy element wielu aplikacji Java, szczególnie tych, które wykorzystują komunikację sieciową lub przechowują obiekty w plikach. Deserializacja pozwala na odbudowę stanu obiektu, tak jak był przed serializacją.
Przykład użycia deserializacji
Załóżmy, że mamy klasę Person, która implementuje interfejs Serializable. To oznacza, że obiekty tej klasy mogą być serializowane i deserializowane. Poniżej znajduje się przykład, jak można przeprowadzić deserializację takiego obiektu.
import java.io.*;
// Klasa Person musi implementować Serializable
class Person implements Serializable {
    private static final long serialVersionUID = 1L;
    // Zmienna przechowująca imię osoby
    private String name; 
    // Zmienna przechowująca wiek osoby
    private int age; 
    // Konstruktor klasy Person
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // Metoda zwracająca opis osoby
    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + '}';
    }
}
public class DeserializeExample {
    public static void main(String[] args) {
        // Ścieżka do pliku z zapisanym obiektem
        String filePath = "person.ser"; 
        
        try ( // Blok try-with-resources dla strumieni
              // Otwieranie pliku do odczytu
              FileInputStream fileIn = new FileInputStream(filePath);
              // Strumień do deserializacji obiektu
              ObjectInputStream in = new ObjectInputStream(fileIn);
        ) {
            // Deserializacja obiektu
            Person p = (Person) in.readObject();
            // Wyświetlenie deserializowanego obiektu
            System.out.println("Deserialized Person: " + p);
        } catch (IOException i) {
            // Obsługa wyjątków związanych z wejściem-wyjściem
            i.printStackTrace();
            return;
        } catch (ClassNotFoundException c) {
            // Wyjątek, gdy klasa obiektu nie jest znaleziona
            System.out.println("Person class not found");
            c.printStackTrace();
            return;
        }
    }
}
Jak to działa?
- Klasa Personimplementuje interfejsSerializable, co jest wymagane do serializacji i deserializacji.
- W metodzie mainotwieramy plikperson.ser, który zawiera zserializowany obiekt klasyPerson.
- Używając ObjectInputStream, odczytujemy obiekt z pliku i rzutujemy go na typPerson.
- Po pomyślnej deserializacji, obiekt jest gotowy do użycia, co demonstrujemy wywołując metodę toString.
Podsumowanie
Deserializacja w Java umożliwia odbudowanie obiektów z danych binarnych, przywracając ich stan sprzed serializacji. Jest to szczególnie użyteczne w aplikacjach rozproszonych, gdzie obiekty muszą być przesyłane przez sieć lub zapisywane do trwałej pamięci. Kluczowym aspektem jest odpowiednia obsługa wyjątków, szczególnie w sytuacjach, gdy struktura klasy uległa zmianie lub klasa nie jest dostępna.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

