Maîtriser Java ObjectOutputStream : Sérialisation, méthodes et exemples pratiques
Maîtriser Java ObjectOutputStream : Sérialisation, méthodes et exemples pratiques
La classe ObjectOutputStream du package java.io permet d'écrire des objets Java pour qu'ils puissent être relus plus tard par ObjectInputStream. Elle étend OutputStream et constitue la colonne vertébrale du mécanisme de sérialisation intégré de Java.
Comment fonctionne ObjectOutputStream
Lorsqu'on écrit un objet dans un ObjectOutputStream, le framework encode le nom de la classe, les valeurs des champs et les informations de type dans un format binaire — un processus appelé sérialisation. Le flux d'octets résultant peut être stocké dans un fichier, transmis sur un réseau, ou même embarqué en mémoire.
Important : Seuls les objets implémentant java.io.Serializable peuvent être sérialisés. Cette interface agit comme un marqueur indiquant au runtime qu'un objet peut être persisté ou transmis.
Création d'un ObjectOutputStream
Importez la classe :
import java.io.ObjectOutputStream;
Puis liez-la à un FileOutputStream ou tout autre OutputStream sous-jacent :
// Écriture dans un fichier "donnees.bin"
FileOutputStream fluxFichier = new FileOutputStream("donnees.bin");
ObjectOutputStream fluxObjets = new ObjectOutputStream(fluxFichier);
fluxObjets est maintenant prêt à sérialiser des objets dans fluxFichier.
Méthodes principales d'ObjectOutputStream
La classe hérite des méthodes de OutputStream et ajoute des méthodes spécialisées :
write(int b)– écrit un seul octetwriteBoolean(boolean v)– écrit une valeur booléennewriteChar(int v)– écrit un caractèrewriteInt(int v)– écrit un entierwriteObject(Object obj)– sérialise l'objet donné
Exemple 1 : Sérialisation de primitives et de chaînes
import java.io.*;
public class Main {
public static void main(String[] args) {
int donnee1 = 5;
String donnee2 = "Ceci est programiz";
try {
// Écriture des objets
FileOutputStream fos = new FileOutputStream("fichier.bin");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(donnee1);
oos.writeObject(donnee2);
oos.close();
// Lecture des objets
FileInputStream fis = new FileInputStream("fichier.bin");
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.println("Donnée entière : " + ois.readInt());
System.out.println("Donnée chaîne : " + ois.readObject());
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Sortie
Donnée entière : 5 Donnée chaîne : Ceci est programiz
Exemple 2 : Sérialisation d'un objet personnalisé
Pour sérialiser une classe utilisateur, implémentez simplement Serializable :
import java.io.*;
class Chien implements Serializable {
String nom;
String race;
Chien(String nom, String race) {
this.nom = nom;
this.race = race;
}
}
public class Main {
public static void main(String[] args) {
Chien chien1 = new Chien("Tyson", "Labrador");
try {
// Écriture de l'objet
FileOutputStream fos = new FileOutputStream("chien.bin");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(chien1);
oos.close();
// Lecture de l'objet
FileInputStream fis = new FileInputStream("chien.bin");
ObjectInputStream ois = new ObjectInputStream(fis);
Chien nouveauChien = (Chien) ois.readObject();
System.out.println("Nom du chien : " + nouveauChien.nom);
System.out.println("Race du chien : " + nouveauChien.race);
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Sortie
Nom du chien : Tyson Race du chien : Labrador
La classe Chien doit implémenter Serializable car ObjectOutputStream ne peut écrire que des objets sérialisables.
Opérations supplémentaires d'ObjectOutputStream
| Méthode | Description |
|---|---|
flush() | Vide les octets en tampon vers le flux sous-jacent |
drain() | Vide les données en tampon (disponible Java 9+) |
close() | Ferme le flux et libère les ressources système |
Pour approfondir, consultez la documentation officielle Java.
Java
- Comprendre le mot-clé final en Java : variables, méthodes et classes
- L'opérateur instanceof en Java : guide complet
- Maîtriser l'héritage Java : concepts, types et exemples pratiques
- Comprendre les classes imbriquées statiques en Java : utilisation, différences et exemples
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Le pattern Singleton en Java expliqué : implémentation et utilisation sûre
- Maîtriser la réflexion Java : inspection des classes, méthodes et champs à l'exécution
- Maîtriser les génériques Java : Construire du code réutilisable et type-safe
- Maîtriser les opérations sur les fichiers Java avec java.io – Création, lecture, écriture et suppression