0Pricing
Java Academy · Lezione

Nozioni di base sulla serializzazione Java

Implementi Serializable, scriva oggetti negli stream con ObjectOutputStream e li legga nuovamente.

Nozioni di base sulla serializzazione Java è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.

Che cos'è la serializzazione in Java?

La serializzazione converte lo stato di un oggetto in un flusso di byte, in modo che possa essere salvato su disco, inviato tramite rete o memorizzato in un database. La deserializzazione esegue il processo inverso.

L'interfaccia marker Serializable

Per serializzare una classe, implementare java.io.Serializable. Non contiene metodi: segnala alla JVM che le istanze di questa classe possono essere serializzate.

import java.io.Serializable;
public class User implements Serializable {
    private String name;
    private int age;
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
    @Override public String toString() { return name + " / " + age; }
}

Scrivere un oggetto con ObjectOutputStream

Racchiudere un FileOutputStream in un ObjectOutputStream e chiamare writeObject() per serializzare l'oggetto.

import java.io.*;
try (ObjectOutputStream oos = new ObjectOutputStream(
        new FileOutputStream("user.ser"))) {
    oos.writeObject(new User("Alice", 30));
    System.out.println("Serialized successfully");
}

Leggere un oggetto con ObjectInputStream

Racchiudere un FileInputStream in un ObjectInputStream e chiamare readObject() per deserializzare l'oggetto. Eseguire il cast del risultato al tipo previsto.

import java.io.*;
try (ObjectInputStream ois = new ObjectInputStream(
        new FileInputStream("user.ser"))) {
    User u = (User) ois.readObject();
    System.out.println("Deserialized: " + u);
}

Serializzazione di un grafo di oggetti

Tutti gli oggetti referenziati dall'oggetto serializzato devono implementare anche Serializable, altrimenti in fase di esecuzione viene generata una NotSerializableException.

public class Order implements Serializable {
    private User customer;   // User must be Serializable
    private List<String> items;
    public Order(User customer, List<String> items) {
        this.customer = customer;
        this.items = items;
    }
}

NotSerializableException

Se un campo del grafo degli oggetti non è serializzabile e non è contrassegnato come transient, Java genera una NotSerializableException durante la scrittura.

// Thread is NOT Serializable
public class Task implements Serializable {
    private Thread worker; // throws NotSerializableException!
    // Fix: mark as transient
    private transient Thread worker2;
}

Il grafo degli oggetti e i riferimenti condivisi

Durante la serializzazione, Java tiene traccia dell'identità degli oggetti. Se due campi fanno riferimento allo stesso oggetto, viene scritta una sola copia ed entrambi i campi puntano alla stessa istanza deserializzata.

Serializzazione delle raccolte

Le raccolte standard come ArrayList, HashMap e LinkedList implementano già Serializable, quindi vengono serializzate purché lo facciano anche i loro elementi.

List<String> names = new ArrayList<>(List.of("Alice", "Bob"));
try (ObjectOutputStream oos = new ObjectOutputStream(
        new FileOutputStream("names.ser"))) {
    oos.writeObject(names);
}

Ereditarietà e serializzazione

Se una superclasse è Serializable, anche tutte le sottoclassi sono serializzabili. Se la superclasse NON è serializzabile, i campi della superclasse non vengono salvati; per la deserializzazione, la superclasse deve avere un costruttore senza argomenti.

Verifica del flusso di byte

Il flusso di byte serializzato inizia con i byte magici 0xACED 0x0005. È possibile esaminarlo con un editor esadecimale oppure decodificarlo con gli strumenti SerialVer per comprenderne il formato.

Avviso di sicurezza

La deserializzazione Java è un vettore di attacco noto. Non deserializzi mai dati provenienti da fonti non attendibili senza prima convalidarli. Per i dati esterni, preferisca JSON, Protobuf o envelope firmati.

Verifica rapida

Quale metodo serializza un oggetto in un flusso?

Riepilogo

La serializzazione Java utilizza ObjectOutputStream / ObjectInputStream. Le classi devono implementare Serializable. Eviti di serializzare dati non attendibili e preferisca alternative moderne per il nuovo codice.

Domande Frequenti

La lezione «Nozioni di base sulla serializzazione Java» è gratuita?

Sì — il testo completo di «Nozioni di base sulla serializzazione Java» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.

Cosa imparerò in «Nozioni di base sulla serializzazione Java»?

Implementi Serializable, scriva oggetti negli stream con ObjectOutputStream e li legga nuovamente. Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Java Academy?

Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Nozioni di base sulla serializzazione Java»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Java Academy?

Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Nozioni di base sulla serializzazione Java
  2. Campi transient e serialVersionUID
  3. Serializzazione personalizzata: writeObject e readObject
  4. Alternative moderne: JSON e Protocol Buffers
← Torna a Java Academy