Czym jest Deserializacja w Java?

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?

  1. Klasa Person implementuje interfejs Serializable, co jest wymagane do serializacji i deserializacji.
  2. W metodzie main otwieramy plik person.ser, który zawiera zserializowany obiekt klasy Person.
  3. Używając ObjectInputStream, odczytujemy obiekt z pliku i rzutujemy go na typ Person.
  4. 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.

Scroll to Top