Serializacja w Javie

Serializacja w Javie to mechanizm przekształcania stanu obiektu na ciąg bajtów, aby można było go zapisać do pliku, przesłać przez sieć lub przechować w bazie danych. Proces ten umożliwia również deserializację, czyli odtworzenie obiektu z zapisanego stanu. Serializacja jest szczególnie użyteczna w aplikacjach wymagających wymiany danych między różnymi komponentami Javy działającymi w różnych środowiskach JVM.

Przykład: Serializacja i deserializacja obiektu User

W tym przykładzie stworzymy klasę User, która będzie serializowalna, a następnie pokażemy, jak można serializować i deserializować obiekt tej klasy.

Klasa User
import java.io.Serializable;

// Klasa User implementująca interfejs Serializable
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    private String name;
    private transient String password; 
    // transient - pole nie będzie serializowane

    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }

    // Gettery
    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }

    // Settery
    public void setName(String name) {
        this.name = name;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
Serializacja obiektu User
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class SerializeUser {
    public static void main(String[] args) {
        User user = new User("JanKowalski", "mojeHaslo123");

        // Próba serializacji obiektu User do pliku
        try (FileOutputStream fileOut = new FileOutputStream("user.ser");
             ObjectOutputStream out = new ObjectOutputStream(fileOut)) {
            out.writeObject(user);
            System.out.println("Obiekt User został zserializowany");
        } catch (IOException i) {
            i.printStackTrace();
        }
    }
}
Deserializacja obiektu User
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class DeserializeUser {
    public static void main(String[] args) {
        User user = null;

        // Próba deserializacji obiektu User z pliku
        try (FileInputStream fileIn = new FileInputStream("user.ser");
             ObjectInputStream in = new ObjectInputStream(fileIn)) {
            user = (User) in.readObject();
            System.out.println("Obiekt User został odczytany");
            System.out.println("Nazwa: " + user.getName());
            // Hasło nie zostanie odczytane, ponieważ 
            // jest oznaczone jako transient
        } catch (IOException i) {
            i.printStackTrace();
            return;
        } catch (ClassNotFoundException c) {
            System.out.println("Klasa User nie została znaleziona");
            c.printStackTrace();
            return;
        }

        if (user != null) {
            System.out.println("Nazwa użytkownika: " + user.getName());
            // Hasło jest null, ponieważ nie było serializowane
            System.out.println("Hasło: " + user.getPassword());
        }
    }
}

Podsumowanie

Serializacja w Javie umożliwia zapisywanie i odczytywanie stanu obiektów, co jest niezwykle przydatne w wielu scenariuszach programistycznych, takich jak przechowywanie danych, przesyłanie obiektów między serwerami lub klientami w aplikacjach sieciowych. Ważne jest, aby pamiętać o słowie kluczowym transient, które pozwala wykluczyć niektóre pola obiektu z procesu serializacji, co jest przydatne w kontekście bezpieczeństwa danych, jak pokazano na przykładzie pola password w klasie User.

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