Maîtriser Java ObjectInputStream : Guide complet
Maîtriser Java ObjectInputStream : Guide complet
La classe ObjectInputStream du package java.io permet de désérialiser des objets précédemment écrits par ObjectOutputStream. Elle étend la classe abstraite InputStream.
Avant de plonger dans ObjectInputStream, assurez-vous de connaître la classe ObjectOutputStream, qui gère le processus de sérialisation.
Comment fonctionne ObjectInputStream
La sérialisation transforme des objets Java en flux d'octets stockables ou transmissibles. La désérialisation — le processus inverse — est gérée par ObjectInputStream, qui lit le flux d'octets et reconstruit les objets originaux.
Création d'un ObjectInputStream
Pour créer un ObjectInputStream, importez la classe et liez-la à une source, généralement un FileInputStream :
// Lien vers un fichier
FileInputStream fluxFichier = new FileInputStream("exemple.dat");
// Encapsulation dans ObjectInputStream
ObjectInputStream fluxObjets = new ObjectInputStream(fluxFichier);
Une fois instancié, fluxObjets peut lire tout objet sérialisé depuis le fichier.
Méthodes principales d'ObjectInputStream
read()– Lit un seul octetreadBoolean()– Lit une valeur booléennereadChar()– Lit un caractèrereadInt()– Lit un entierreadObject()– Reconstruit un objet depuis le flux
Exemple 1 : Désérialisation basique
Exemple minimal écrivant un entier et une chaîne dans un fichier, puis les relisant.
import java.io.*;
public class Main {
public static void main(String[] args) {
int donnee1 = 5;
String donnee2 = "Ceci est programiz";
try {
// Écriture des données
FileOutputStream fos = new FileOutputStream("fichier.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(donnee1);
oos.writeObject(donnee2);
// Lecture des données
FileInputStream fis = new FileInputStream("fichier.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.println("Donnée entière : " + ois.readInt());
System.out.println("Donnée chaîne : " + ois.readObject());
oos.close();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Sortie
Donnée entière : 5 Donnée chaîne : Ceci est programiz
Exemple 2 : Désérialisation d'un objet personnalisé
Sérialisez et désérialisez un objet Chien simple. La classe doit implémenter 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 chien = new Chien("Tyson", "Labrador");
try {
// Sérialisation
FileOutputStream fos = new FileOutputStream("fichier.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(chien);
// Désérialisation
FileInputStream fis = new FileInputStream("fichier.txt");
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);
oos.close();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Sortie
Nom du chien : Tyson Race du chien : Labrador
Points clés :
- Utilisez
ObjectOutputStreampour écrire les objets - Utilisez
ObjectInputStreampour les relire - Seuls les objets implémentant
Serializablepeuvent être sérialisés
Méthodes supplémentaires d'ObjectInputStream
| Méthode | Description |
|---|---|
available() | Renvoie le nombre d'octets lisibles sans blocage |
mark() | Marque la position courante dans le flux |
reset() | Réinitialise le flux à la marque la plus récente |
skipBytes(int n) | Ignore n octets |
close() | Ferme le flux et libère les ressources |
Pour plus de détails, visitez 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
- 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 Java ObjectOutputStream : Sérialisation, méthodes et exemples pratiques
- 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