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.

