Co to jest serializacja i deserializacja w kontekście Javy

Definicja pojęcia Co to jest serializacja i deserializacja w kontekście Javy
Metodyki
Definicja Agile

Co to jest serializacja i deserializacja w kontekście Javy? Jakie są główne zastosowania tych procesów i jakie są różnice między nimi?


  1. Serializacja:

    • Serializacja w Javie oznacza proces konwertowania obiektu Java na sekwencję bajtów, które mogą być łatwo zapisane do pliku lub przesłane przez sieć.
    • Głównym celem serializacji jest możliwość przesyłania obiektów przez sieć lub zapisywania ich do trwałego magazynu danych, takiego jak plik.
    • Aby umożliwić serializację, klasa Java musi implementować interfejs Serializable.
  2. Deserializacja:

    • Deserializacja w Javie to proces odwrotny do serializacji, polegający na odtwarzaniu obiektu Java z jego sekwencji bajtów.
    • Głównym celem deserializacji jest przywrócenie obiektów z pliku lub danych otrzymanych przez sieć do ich oryginalnego stanu w pamięci.

Zastosowania:

  • Komunikacja między procesami: Serializacja i deserializacja są powszechnie stosowane do przesyłania obiektów między różnymi procesami w aplikacjach rozproszonych.
  • Persistencja danych: Pozwalają na zapisywanie obiektów do plików lub baz danych, aby mogły być później odtworzone.
  • Klastrowanie: W środowiskach klastra, gdzie obiekty muszą być przesyłane między różnymi węzłami, serializacja i deserializacja są kluczowe.

Różnice:

  • Serializacja konwertuje obiekt Java na sekwencję bajtów, podczas gdy deserializacja przywraca obiekt z tej sekwencji bajtów do jego oryginalnej postaci w pamięci.
  • Serializacja jest procesem wyjściowym, podczas gdy deserializacja jest procesem wejściowym.
  • W przypadku serializacji, wszystkie pola obiektu są zapisywane do strumienia bajtów, podczas gdy podczas deserializacji obiekt jest odtwarzany z tego strumienia bajtów.

Zarówno serializacja, jak i deserializacja są kluczowymi mechanizmami w programowaniu Java, szczególnie w kontekście komunikacji między procesami i trwałego przechowywania danych.

Przykładowo, rozważmy prostą aplikację do zarządzania listą zadań. Możemy utworzyć klasę Task reprezentującą pojedyncze zadanie z polami takimi jak nazwa zadania, opis, priorytet, termin wykonania itp.

				
					import java.io.*;

// Klasa reprezentująca zadanie
class Task implements Serializable {
    private String name;
    private String description;
    private int priority;

    public Task(String name, String description, int priority) {
        this.name = name;
        this.description = description;
        this.priority = priority;
    }

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

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

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public int getPriority() {
        return priority;
    }

    public void setPriority(int priority) {
        this.priority = priority;
    }
}

public class Main {
    public static void main(String[] args) {
        // Tworzenie obiektu zadania
        Task task = new Task("Napisać raport", "Raport z ostatniego spotkania", 2);

        try {
            // Serializacja obiektu do pliku
            FileOutputStream fileOut = new FileOutputStream("task.ser");
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(task);
            out.close();
            fileOut.close();
            System.out.println("Obiekt zadania został zserializowany i zapisany do task.ser");
        } catch(IOException i) {
            i.printStackTrace();
        }

        // Deserializacja obiektu z pliku
        Task deserializedTask = null;
        try {
            FileInputStream fileIn = new FileInputStream("task.ser");
            ObjectInputStream in = new ObjectInputStream(fileIn);
            deserializedTask = (Task) in.readObject();
            in.close();
            fileIn.close();
        } catch(IOException i) {
            i.printStackTrace();
            return;
        } catch(ClassNotFoundException c) {
            System.out.println("Nie znaleziono klasy Task");
            c.printStackTrace();
            return;
        }

        // Wyświetlanie danych deserializowanego zadania
        System.out.println("Nazwa zadania: " + deserializedTask.getName());
        System.out.println("Opis zadania: " + deserializedTask.getDescription());
        System.out.println("Priorytet zadania: " + deserializedTask.getPriority());
    }
}

				
			

W tym przykładzie klasa Task implementuje interfejs Serializable, co umożliwia jej serializację. Obiekt klasy Task jest tworzony, serializowany do pliku “task.ser”, a następnie deserializowany z tego samego pliku. Dzięki temu możemy zapisać stan obiektu (np. informacje o zadaniu) i odtworzyć go później, zachowując wszystkie jego właściwości.

zł30

Pytania rekrutacyjne JavaScript

zł25

Pytania rekrutacyjne SQL

zł30

Pytania rekrutacyjne Spring Framework 

zł30

Java pytania rekrutacyjne

Scroll to Top