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.