Serializacja w Javie to proces konwersji obiektu do strumienia bajtów, co umożliwia jego zapisanie na dysku, przesłanie przez sieć lub zapisanie w bazie danych. Nie wszystkie klasy w Javie mogą być jednak serializowane. Aby klasa była serializowalna, musi implementować interfejs Serializable, co jest sygnałem dla JVM, że obiekt tej klasy może być bezpiecznie serializowany.
Przykład kodu w Javie
Poniższy przykład demonstruje, jak można zserializować i deserializować prosty obiekt w Javie. W naszym przykładzie stworzymy klasę Car, która będzie serializowalna, a następnie zapiszemy i odczytamy obiekt tej klasy.
import java.io.*;
// Klasa reprezentująca samochód
public class Car implements Serializable {
    private static final long serialVersionUID = 1L;
    // String opisujący markę samochodu
    private String brand;
    
    // Integer opisujący rok produkcji
    private int year;
    // Konstruktor klasy Car
    public Car(String brand, int year) {
        this.brand = brand;
        this.year = year;
    }
    // Metoda zwracająca markę samochodu
    public String getBrand() {
        return brand;
    }
    // Metoda zwracająca rok produkcji
    public int getYear() {
        return year;
    }
    // Metoda do serializacji obiektu Car
    public static void serializeCar(Car car, String filename) throws IOException {
        FileOutputStream fileOut = new FileOutputStream(filename);
        ObjectOutputStream out = new ObjectOutputStream(fileOut);
        out.writeObject(car); // Serializacja obiektu
        out.close();
        fileOut.close();
    }
    // Metoda do deserializacji obiektu Car
    public static Car deserializeCar(String filename) throws IOException, ClassNotFoundException {
        FileInputStream fileIn = new FileInputStream(filename);
        ObjectInputStream in = new ObjectInputStream(fileIn);
        Car car = (Car) in.readObject(); // Deserializacja obiektu
        in.close();
        fileIn.close();
        return car;
    }
}
// Główna klasa aplikacji
public class Main {
    public static void main(String[] args) {
        Car myCar = new Car("Toyota", 2021); // Tworzenie nowego obiektu Car
        try {
            // Serializacja samochodu
            Car.serializeCar(myCar, "car.ser");
            // Deserializacja samochodu
            Car deserializedCar = Car.deserializeCar("car.ser");
            // Wyświetlanie informacji o samochodzie
            System.out.println("Marka: " + deserializedCar.getBrand());
            System.out.println("Rok produkcji: " + deserializedCar.getYear());
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
Podsumowanie
W przykładzie kodu pokazaliśmy, jak zaimplementować prostą serializację i deserializację obiektu w Javie. Kluczowym elementem jest implementacja interfejsu Serializable w klasie, którą chcemy serializować. Ważne jest również prawidłowe zarządzanie strumieniami wejścia/wyjścia, co umożliwia bezpieczne zapisywanie i odczytywanie obiektów. Warto pamiętać, że niektóre klasy mogą wymagać szczególnej uwagi podczas serializacji, na przykład gdy zawierają nie-serializowalne pola.
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.

