Notions fondamentales de la sérialisation Java
Implémentez Serializable, écrivez des objets dans des flux avec ObjectOutputStream et relisez-les.
Notions fondamentales de la sérialisation Java est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
Qu’est-ce que la sérialisation Java ?
La sérialisation convertit l’état d’un objet en flux d’octets afin de pouvoir l’enregistrer sur disque, l’envoyer sur un réseau ou le stocker dans une base de données. La désérialisation effectue le processus inverse.
L’interface marqueur Serializable
Pour sérialiser une classe, implémentez java.io.Serializable. Elle ne possède aucune méthode : elle indique à la JVM que les instances de cette classe peuvent être sérialisées.
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; }
}Écrire un objet avec ObjectOutputStream
Enveloppez un FileOutputStream dans un ObjectOutputStream, puis appelez writeObject() pour sérialiser l’objet.
import java.io.*;
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("user.ser"))) {
oos.writeObject(new User("Alice", 30));
System.out.println("Serialized successfully");
}Lire un objet avec ObjectInputStream
Enveloppez un FileInputStream dans un ObjectInputStream, puis appelez readObject() pour désérialiser l’objet. Convertissez le résultat vers le type attendu.
import java.io.*;
try (ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("user.ser"))) {
User u = (User) ois.readObject();
System.out.println("Deserialized: " + u);
}Sérialiser un graphe d’objets
Tous les objets référencés par l’objet sérialisé doivent également implémenter Serializable, sinon une NotSerializableException est levée à l’exécution.
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
Si un champ du graphe d’objets n’est pas sérialisable et n’est pas marqué transient, Java lève une NotSerializableException au moment de l’écriture.
// Thread is NOT Serializable
public class Task implements Serializable {
private Thread worker; // throws NotSerializableException!
// Fix: mark as transient
private transient Thread worker2;
}Graphe d’objets et références partagées
Java suit l’identité des objets pendant la sérialisation. Si deux champs référencent le même objet, une seule copie est écrite et les deux champs pointent vers la même instance désérialisée.
Sérialiser des collections
Les collections standard comme ArrayList, HashMap et LinkedList implémentent déjà Serializable : elles sont donc sérialisées à condition que leurs éléments le soient également.
List<String> names = new ArrayList<>(List.of("Alice", "Bob"));
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("names.ser"))) {
oos.writeObject(names);
}Héritage et sérialisation
Si une superclasse est Serializable, toutes ses sous-classes sont également sérialisables. Si la superclasse n’est pas sérialisable, ses champs ne sont pas enregistrés ; elle doit disposer d’un constructeur sans argument pour la désérialisation.
Vérifier le flux d’octets
Le flux d’octets sérialisé commence par les octets magiques 0xACED 0x0005. Vous pouvez l’inspecter avec un éditeur hexadécimal ou le décoder avec les outils SerialVer pour comprendre son format.
Avertissement de sécurité
La désérialisation Java est un vecteur d’attaque connu. Ne désérialisez jamais des données provenant de sources non fiables sans les valider. Préférez JSON, Protobuf ou des enveloppes signées pour les données externes.
Vérification rapide
Quelle méthode sérialise un objet dans un flux ?
Récapitulatif
La sérialisation Java utilise ObjectOutputStream / ObjectInputStream. Les classes doivent implémenter Serializable. Évitez de sérialiser des données non fiables : préférez des solutions modernes pour tout nouveau code.
Questions Fréquemment Posées
La leçon « Notions fondamentales de la sérialisation Java » est-elle gratuite ?
Oui — le texte complet de « Notions fondamentales de la sérialisation Java » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Notions fondamentales de la sérialisation Java » ?
Implémentez Serializable, écrivez des objets dans des flux avec ObjectOutputStream et relisez-les. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Notions fondamentales de la sérialisation Java » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Notions fondamentales de la sérialisation Java
- Champs transient et serialVersionUID
- Sérialisation personnalisée : writeObject et readObject
- Solutions modernes : JSON et Protocol Buffers