đ Plan du Cours
- Flux en Java
- Types de flux
- Classes java.io
- Flux tampon
- Lecture fichiers Java
- Ăcriture fichiers Java
- Classe Scanner Java
- Gestion fin fichier
- Entrée/sortie standard Java
- Objets Serialization Java
đ 1. Flux en Java
đ Notions clĂ©s & DĂ©finitions
- Flux (stream) : Canal de communication permettant le transfert de données entre une source et une destination. Il représente un objet dans lequel circulent des données sous forme d'octets ou de caractÚres. AUTEUR (date) : « Un flux (stream) représente un canal de communication » (source).
- Flux en entrée (lecture) : Flux utilisé pour recevoir des données depuis une source externe, comme un fichier, la mémoire ou l'utilisateur. Il permet de lire des octets ou des caractÚres.
- Flux en sortie (Ă©criture) : Flux destinĂ© Ă envoyer des donnĂ©es vers une destination externe, comme un fichier ou la console. Il permet dâĂ©crire des octets ou des caractĂšres.
- Ătapes de gestion dâun flux : Comprennent lâouverture du flux, la lecture ou lâĂ©criture des donnĂ©es, puis la fermeture du flux pour libĂ©rer les ressources.
- Codage des caractÚres en Unicode : Les flux traitent les caractÚres codés sur 2 octets, permettant la représentation universelle des caractÚres.
đ Points essentiels
- Un flux en Java sert de mĂ©diateur entre la source (fichier, mĂ©moire, utilisateur) et la programme, facilitant lâĂ©change de donnĂ©es.
- La gestion dâun flux suit gĂ©nĂ©ralement trois Ă©tapes : ouverture, lecture/Ă©criture, fermeture. La fermeture est essentielle pour libĂ©rer les ressources systĂšme.
- Les flux peuvent traiter des donnĂ©es sous forme dâoctets (flux binaires) ou de caractĂšres (flux textes). Les classes principales pour les flux binaires sont InputStream et OutputStream, tandis que pour les flux textes, ce sont Reader et Writer.
- Le codage Unicode sur 2 octets est standard pour représenter tous les caractÚres, assurant une compatibilité internationale.
- Les flux peuvent utiliser un tampon (buffer) pour améliorer les performances lors du traitement par lots, notamment avec les classes BufferedReader et BufferedWriter.
- Les flux automatiques System.in, System.out et System.err sont fournis par le package java.lang.System pour la gestion de l'entrĂ©e standard, la sortie standard et la sortie dâerreur.
- La classe java.io.File reprĂ©sente un fichier dans le systĂšme de fichiers et permet de crĂ©er des flux pour la lecture ou lâĂ©criture dans ce fichier.
đĄ Ă retenir
Un flux en Java est un canal de communication permettant de transfĂ©rer des donnĂ©es entre le programme et une source ou destination externe, en suivant un cycle dâouverture, de traitement et de fermeture, avec un codage standard en Unicode sur 2 octets.
đ 2. Types de flux
đ Notions clĂ©s & DĂ©finitions
- Flux binaires (octets) : Classes InputStream et OutputStream gĂšrent le transfert de donnĂ©es sous forme dâoctets, permettant la lecture et lâĂ©criture de fichiers ou flux de donnĂ©es brutes sans traitement de caractĂšres.
- Flux textes (caractĂšres) : Classes Reader et Writer manipulent des donnĂ©es sous forme de caractĂšres, facilitant la lecture et lâĂ©criture de texte en tenant compte du codage (ex : Unicode).
- Flux d'entrée (InputStream, Reader) : Canaux de communication permettant de recevoir des données dans un programme Java, comme System.in (entrée standard) ou un flux depuis un fichier.
- Flux de sortie (OutputStream, Writer) : Canaux de communication permettant dâenvoyer des donnĂ©es depuis un programme Java, comme System.out ou un flux vers un fichier.
- Flux automatiques System.in, System.out, System.err : Flux prĂ©dĂ©finis dans java.lang.System pour la lecture clavier, lâaffichage Ă©cran, et la gestion des erreurs, respectivement.
đ Points essentiels
- Un flux reprĂ©sente un canal de communication dans lequel circulent des donnĂ©es, pouvant ĂȘtre en octets ou en caractĂšres, selon le type de flux.
- Les flux peuvent ĂȘtre en entrĂ©e (lecture) ou en sortie (Ă©criture), et peuvent utiliser un tampon (buffer) pour amĂ©liorer les performances lors du traitement par lots.
- La classe System fournit trois flux automatiques : System.in (entrĂ©e standard), System.out (sortie standard), et System.err (flux dâerreur).
- Le package java.io regroupe la majorité des classes de gestion des flux, notamment InputStream, OutputStream, Reader, et Writer.
- DiffĂ©rents types de flux sont utilisĂ©s selon lâorigine ou la destination : tampon, fichier, tableau, tube.
- Les flux tampon, comme BufferedInputStream ou BufferedWriter, amĂ©liorent la performance en rĂ©duisant le nombre dâopĂ©rations dâentrĂ©e/sortie en traitant les donnĂ©es par blocs.
- La lecture dâun octet ou dâun caractĂšre peut se faire via des mĂ©thodes spĂ©cifiques, par exemple readLine() dans BufferedReader pour lire une ligne de texte.
- La gestion des flux sur fichiers implique la crĂ©ation dâun objet File (package java.io) et lâutilisation de classes adaptĂ©es comme FileInputStream ou FileReader.
- La classe Scanner offre une autre mĂ©thode de lecture, notamment sur lâentrĂ©e standard ou dans des fichiers, en dĂ©coupant le contenu en tokens selon des dĂ©limiteurs.
đĄ Ă retenir
Les flux en Java sont des canaux de communication essentiels permettant de gĂ©rer lâentrĂ©e et la sortie de donnĂ©es sous forme dâoctets ou de caractĂšres, avec des classes spĂ©cifiques pour optimiser leur traitement selon la source ou la destination.
đ 3. Classes java.io
đ Notions clĂ©s & DĂ©finitions
- Paquetage java.io : Contient toutes les classes relatives à la gestion des flux d'entrée/sortie en Java, permettant de créer, manipuler et gérer des flux pour diverses sources et destinations de données.
- InputStream et OutputStream : Classes principales pour les flux binaires (octets). InputStream pour la lecture, OutputStream pour l'écriture. Exemple : ByteArrayOutputStream (écriture dans un tableau d'octets), BufferedInputStream (tampon pour lecture efficace).
- Reader et Writer : Classes principales pour les flux de caractĂšres (texte). Reader pour la lecture, Writer pour l'Ă©criture. Exemple : BufferedWriter (tampon pour Ă©criture efficace), FileReader (lecture Ă partir dâun fichier).
- File : Classe reprĂ©sentant un fichier ou un rĂ©pertoire dans le systĂšme de fichiers, construite Ă partir du chemin dâaccĂšs. Elle sert Ă manipuler les fichiers (crĂ©ation, suppression, vĂ©rification).
- Nommage des classes : Selon leur origine ou destination (tampon, fichier, tableau, tube), leur sens (lecture ou écriture) et leur type (octets ou caractÚres). Par exemple, BufferedInputStream (tampon, octets, lecture), ByteArrayOutputStream (tableau, octets, écriture), BufferedWriter (tampon, caractÚres, écriture).
đ Points essentiels
- La gestion des flux en Java repose sur la crĂ©ation dâobjets flux connectant une source ou une destination Ă un programme, permettant lâĂ©change de donnĂ©es sous forme dâoctets ou de caractĂšres.
- Les flux binaires (classes InputStream et OutputStream) manipulent des octets, tandis que les flux de caractĂšres (classes Reader et Writer) gĂšrent le texte.
- Le paquetage java.io fournit des classes pour crĂ©er des flux spĂ©cifiques selon lâorigine ou la destination : tampon, fichier, tableau, tube.
- Les classes BufferedInputStream et BufferedWriter permettent dâamĂ©liorer les performances en utilisant des tampons pour le traitement par lots.
- La classe File représente un fichier ou un répertoire, facilitant la manipulation des fichiers dans le systÚme.
- La lecture et lâĂ©criture dans un fichier se font via des flux spĂ©cifiques : FileInputStream / FileOutputStream pour les octets, FileReader / FileWriter pour les caractĂšres.
- La classe Scanner (voir section 7) offre une autre mĂ©thode pour lire des donnĂ©es, notamment sur lâentrĂ©e standard ou dans des fichiers, en dĂ©coupant les donnĂ©es en tokens selon des dĂ©limiteurs.
- La fin de fichier dans ObjectInputStream est dĂ©tectĂ©e via la gestion dâexception EOFException (voir section 8).
đĄ Ă retenir
Les classes du paquetage java.io permettent de gĂ©rer efficacement les flux dâentrĂ©e et de sortie en Java, en proposant des outils pour manipuler des donnĂ©es binaires ou textuelles, avec des options de tamponnage pour optimiser les performances.
đ 4. Flux tampon
đ Notions clĂ©s & DĂ©finitions
- Flux tampon (Buffered stream) : Classe qui améliore les performances d'entrée/sortie en utilisant une mémoire tampon pour traiter les données par lots, évitant ainsi les opérations d'accÚs fréquentes à la source ou destination.
- BufferedReader : Classe de la bibliothÚque java.io permettant de lire du texte de façon tamponnée, notamment avec la méthode readLine() pour lire une ligne complÚte de texte.
- BufferedWriter : Classe de java.io pour écrire du texte de maniÚre tamponnée, optimisant l'écriture en regroupant les données avant de les transférer.
- MĂ©thode readLine() : Fonction de BufferedReader qui lit une ligne de texte jusquâau caractĂšre de fin de ligne, et la retourne sous forme dâun objet String, en lançant une IOException en cas dâerreur.
- Flux tampon (buffer) : Zone mĂ©moire intermĂ©diaire utilisĂ©e pour stocker temporairement des donnĂ©es lors des opĂ©rations dâentrĂ©e/sortie, permettant un traitement par lots et rĂ©duisant le nombre dâaccĂšs directs Ă la source ou destination.
đ Points essentiels
- Les flux tamponnĂ©s, tels que BufferedReader et BufferedWriter, sont conçus pour amĂ©liorer significativement les performances des opĂ©rations dâentrĂ©e/sortie en regroupant les donnĂ©es dans un tampon mĂ©moire.
- La méthode readLine() de BufferedReader facilite la lecture de texte ligne par ligne, ce qui est pratique pour traiter des fichiers ou des entrées utilisateur.
- Ces classes sâutilisent en complĂ©ment des flux de base (par exemple, FileReader ou FileWriter) pour bĂ©nĂ©ficier de leur capacitĂ© de tamponnage.
- La gestion du tampon permet de rĂ©duire le nombre dâopĂ©rations coĂ»teuses dâaccĂšs aux fichiers ou aux flux, en traitant par lots les donnĂ©es.
- La crĂ©ation dâun flux tamponnĂ© nĂ©cessite gĂ©nĂ©ralement lâinstanciation dâun objet BufferedReader ou BufferedWriter en passant en paramĂštre un flux de base (ex : FileReader, FileWriter).
- La fermeture des flux tamponnés libÚre la mémoire tampon et assure la sauvegarde des données en attente.
đĄ Ă retenir
Les flux tamponnĂ©s, via BufferedReader et BufferedWriter, optimisent les opĂ©rations dâentrĂ©e/sortie en utilisant une mĂ©moire tampon pour traiter efficacement les donnĂ©es par lots, avec la mĂ©thode readLine() permettant une lecture ligne par ligne.
đ 5. Lecture fichiers Java
đ Notions clĂ©s & DĂ©finitions
- File (voir section 2) : Classe java.io.File permettant de reprĂ©senter un fichier ou un rĂ©pertoire Ă partir du chemin dâaccĂšs, facilitant la gestion et la manipulation des fichiers dans le systĂšme de fichiers.
- FileInputStream (voir section 1) : Classe de flux binaire (octets) permettant de lire des donnĂ©es brutes Ă partir dâun fichier, en ouvrant un flux dâentrĂ©e sur un fichier spĂ©cifique.
- FileReader (voir section 1) : Classe de flux de caractĂšres permettant de lire du texte Ă partir dâun fichier, en utilisant un encodage compatible avec Unicode.
- CrĂ©ation dâun objet File : OpĂ©ration consistant Ă instancier un objet java.io.File en lui passant le chemin dâaccĂšs du fichier, prĂ©alable Ă lâouverture dâun flux pour lecture ou Ă©criture.
- Gestion de lâouverture et fermeture des flux : Processus dâinitiation (ouverture) dâun flux pour accĂ©der Ă un fichier, puis sa fermeture aprĂšs utilisation pour libĂ©rer les ressources, souvent via try-with-resources ou mĂ©thodes close().
đ Points essentiels
- La lecture de fichiers en Java sâappuie sur la crĂ©ation dâun objet File Ă partir du chemin dâaccĂšs, qui sert de rĂ©fĂ©rence pour ouvrir un flux spĂ©cifique (ex : FileInputStream pour les octets, FileReader pour les caractĂšres).
- FileInputStream permet la lecture binaire (octets) du contenu dâun fichier, tandis que FileReader facilite la lecture de caractĂšres, notamment pour du texte en Unicode.
- La gestion correcte de lâouverture et de la fermeture des flux est cruciale pour Ă©viter les fuites de ressources. La fermeture doit intervenir aprĂšs la lecture, souvent Ă lâaide de la mĂ©thode close() ou via la syntaxe try-with-resources.
- La classe File ne lit pas directement le contenu, mais sert à localiser et manipuler le fichier pour ouvrir un flux associé.
- La lecture de caractÚres peut utiliser la méthode read() de FileReader ou BufferedReader (pour tamponner et améliorer les performances), avec la méthode readLine() pour lire une ligne complÚte.
- La classe System.in reprĂ©sente un flux dâentrĂ©e standard (clavier), accessible via InputStream (voir section 1), pour la lecture interactive.
đĄ Ă retenir
La lecture de fichiers en Java repose sur la crĂ©ation dâun objet File pour localiser le fichier, puis lâouverture dâun flux adaptĂ© (FileInputStream ou FileReader) pour accĂ©der aux donnĂ©es, en assurant leur fermeture aprĂšs utilisation pour prĂ©server les ressources.
đ 6. Ăcriture fichiers Java
đ Notions clĂ©s & DĂ©finitions
- FileOutputStream : classe de java.io permettant dâĂ©crire des octets dans un fichier, en mode binaire. Elle est utilisĂ©e pour crĂ©er un flux de sortie vers un fichier (voir section 5).
- FileWriter : classe de java.io conçue pour Ă©crire des caractĂšres dans un fichier, en utilisant le codage par dĂ©faut du systĂšme. Elle facilite lâĂ©criture de texte dans un fichier (voir section 5).
- BufferedWriter : classe de java.io qui enveloppe un Writer (par exemple, FileWriter) pour ajouter un tampon dâĂ©criture. Elle optimise les performances en rĂ©duisant le nombre dâopĂ©rations dâĂ©criture en mĂ©moire tampon, et offre la mĂ©thode write() et newLine() pour Ă©crire du texte avec tamponnage (voir section 4).
- Fermeture des flux : Ă©tape essentielle pour libĂ©rer les ressources systĂšme et assurer la sauvegarde correcte des donnĂ©es. Elle se rĂ©alise en appelant la mĂ©thode close() sur lâobjet flux aprĂšs lâĂ©criture (voir section 4).
đ Points essentiels
- La crĂ©ation dâun flux dâĂ©criture commence par lâinstanciation dâun objet comme FileOutputStream ou FileWriter, en passant en paramĂštre un objet File ou un chemin de fichier.
- FileOutputStream est adapté pour écrire des octets, notamment en mode binaire, tandis que FileWriter est plus pratique pour écrire du texte en caractÚres.
- Lâutilisation de BufferedWriter permet dâamĂ©liorer la performance lors de lâĂ©criture en tamponnant les donnĂ©es dans une mĂ©moire tampon, puis en les transfĂ©rant en bloc vers le fichier. La mĂ©thode write() permet dâĂ©crire une chaĂźne de caractĂšres, et newLine() insĂšre une ligne nouvelle.
- La fermeture du flux avec close() est obligatoire pour assurer la sauvegarde des donnĂ©es et libĂ©rer les ressources systĂšme. Elle doit ĂȘtre effectuĂ©e dans un bloc finally ou en utilisant un try-with-resources pour garantir son exĂ©cution mĂȘme en cas dâexception.
- La gestion correcte des flux dâĂ©criture Ă©vite la perte de donnĂ©es et garantit lâintĂ©gritĂ© du fichier.
đĄ Ă retenir
LâĂ©criture dans un fichier en Java sâeffectue via la crĂ©ation dâun flux dâĂ©criture (FileOutputStream, FileWriter ou BufferedWriter), suivie de lâĂ©criture des donnĂ©es, puis de la fermeture du flux pour assurer la sauvegarde et la libĂ©ration des ressources. Le tamponnement avec BufferedWriter optimise la performance lors de lâĂ©criture de texte.
đ 7. Classe Scanner Java
đ Notions clĂ©s & DĂ©finitions
- Classe Scanner (java.util) : classe permettant de lire et découper des flux d'entrée (standard ou fichiers) en tokens selon des délimiteurs, facilitant la lecture de différents types de données (int, double, String).
- Découpage en tokens : processus de division d'une chaßne ou d'un flux en éléments (tokens) individuels, selon un délimiteur spécifié (ex : espace, virgule).
- Lecture sur lâentrĂ©e standard : utilisation de Scanner pour lire des donnĂ©es saisies par lâutilisateur via le flux System.in, simplifiant la gestion des entrĂ©es clavier.
- Lecture dans un fichier : crĂ©ation dâun Scanner Ă partir dâun objet File ou dâun flux de fichier, permettant de traiter le contenu dâun fichier de façon structurĂ©e.
- Méthodes de lecture : méthodes spécifiques pour lire différents types : nextInt(), nextDouble(), nextLine(), etc., qui convertissent le token lu en le type correspondant.
đ Points essentiels
- La classe Scanner appartient au package java.util et offre une interface simple pour lire des donnĂ©es depuis diverses sources, notamment lâentrĂ©e standard et les fichiers.
- Elle permet de découper automatiquement le contenu en tokens en utilisant un délimiteur (par défaut, espace blanc), grùce à la méthode useDelimiter().
- La lecture de données se fait via des méthodes spécifiques : nextInt(), nextDouble(), nextLine(), etc., qui facilitent la conversion en types primitifs ou chaßnes.
- Lors de la lecture dans un fichier, un objet Scanner peut ĂȘtre créé Ă partir dâun objet File ou dâun flux de fichier (ex : FileInputStream).
- La mĂ©thode close() doit ĂȘtre appelĂ©e pour libĂ©rer les ressources une fois la lecture terminĂ©e.
- La fin de fichier est dĂ©tectĂ©e via la gestion dâEOFException lors de la lecture avec ObjectInputStream, mais pour Scanner, il faut vĂ©rifier la prĂ©sence de tokens avec hasNext() ou hasNextInt().
- La classe facilite également le découpage de chaßnes de caractÚres en tokens, en utilisant useDelimiter() pour définir un délimiteur personnalisé.
đĄ Ă retenir
La classe Scanner simplifie la lecture et le dĂ©coupage des flux dâentrĂ©e (standard ou fichiers) en tokens, tout en permettant de lire divers types de donnĂ©es avec une syntaxe claire et efficace.
đ 8. Gestion fin fichier
đ Notions clĂ©s & DĂ©finitions
- Gestion de la fin de fichier : Processus permettant de dĂ©tecter la fin dâun flux de donnĂ©es lors de la lecture, notamment en Java, oĂč aucune mĂ©thode directe nâest fournie par ObjectInputStream pour cette dĂ©tection.
- Absence de mĂ©thode directe dans ObjectInputStream : ObjectInputStream ne possĂšde pas de mĂ©thode spĂ©cifique pour vĂ©rifier si la fin du fichier est atteinte, ce qui oblige Ă utiliser dâautres mĂ©canismes pour gĂ©rer cette situation.
- EOFException : Exception levĂ©e en Java lorsquâune opĂ©ration de lecture dĂ©passe la fin dâun flux ou dâun fichier, utilisĂ©e comme mĂ©canisme pour dĂ©tecter la fin de fichier dans le contexte de ObjectInputStream (voir aussi lâutilisation dâexceptions).
- MĂ©canisme de capture dâexception : Technique consistant Ă entourer la lecture dâun flux avec un bloc try-catch pour attraper EOFException et ainsi dĂ©terminer que la fin du fichier a Ă©tĂ© atteinte, permettant de contrĂŽler la terminaison de la lecture.
đ Points essentiels
- La classe ObjectInputStream ne fournit pas de mĂ©thode spĂ©cifique pour vĂ©rifier si la fin du fichier est atteinte, contrairement Ă dâautres classes de gestion des flux (voir section 1).
- La dĂ©tection de la fin de fichier se fait en capturant lâEOFException qui est levĂ©e lorsquâune tentative de lecture dĂ©passe la derniĂšre donnĂ©e disponible dans le flux.
- La pratique courante consiste Ă entourer la lecture dans un try-catch et Ă arrĂȘter la lecture lorsque cette exception est attrapĂ©e, ce qui Ă©vite des erreurs non gĂ©rĂ©es et permet un contrĂŽle prĂ©cis.
- Ce mĂ©canisme est essentiel pour la lecture sĂ©rielle dâobjets avec ObjectInputStream, notamment lors de la lecture de plusieurs objets dans un fichier (voir section 10).
- La gestion de la fin de fichier par exception est une solution standard en Java, car aucune méthode native ne permet de vérifier la présence de données restantes dans le flux.
đĄ Ă retenir
En Java, la fin dâun fichier lu avec ObjectInputStream ne peut pas ĂȘtre dĂ©tectĂ©e directement par une mĂ©thode spĂ©cifique ; elle doit ĂȘtre gĂ©rĂ©e en capturant lâEOFException lors de la lecture, ce qui constitue une pratique courante pour contrĂŽler la terminaison de flux.
đ 9. EntrĂ©e/sortie standard Java
đ Notions clĂ©s & DĂ©finitions
- Flux (stream) : Canal de communication permettant de transférer des données entre une source et une destination, représenté par un objet dans lequel circulent des octets ou des caractÚres. (source)
- System.in : Flux d'entrée standard en Java, utilisé pour la lecture clavier, fourni automatiquement par le systÚme, de type InputStream. (java.lang.System)
- System.out : Flux de sortie standard en Java, utilisé pour afficher à l'écran, de type PrintStream, fourni automatiquement par le systÚme. (java.lang.System)
- System.err : Flux d'erreur standard en Java, destiné à l'affichage des messages d'erreur, également de type PrintStream, fourni par le systÚme. (java.lang.System)
- Codage Unicode : Norme de codage des caractÚres utilisant 2 octets par caractÚre, permettant la représentation de tous les caractÚres universels, appliquée dans les flux pour assurer la compatibilité multilingue. (source)
đ Points essentiels
- La communication en Java s'effectue via des flux, qui peuvent ĂȘtre en entrĂ©e (lecture) ou en sortie (Ă©criture). Ces flux peuvent reprĂ©senter des octets (flux binaires) ou des caractĂšres (flux textes).
- Les flux automatiques System.in, System.out et System.err sont intégrés dans le paquetage java.lang.System et facilitent la gestion des interactions avec l'utilisateur et la gestion des erreurs.
- La gestion des flux d'entrée/sortie dans Java repose sur le paquetage java.io, qui fournit des classes pour manipuler des flux de données, notamment pour la lecture et l'écriture dans des fichiers ou autres sources.
- Les flux tamponnés, comme BufferedReader et BufferedWriter, améliorent les performances en traitant les données par lots, avec la méthode readLine() permettant de lire une ligne de texte en une seule opération.
- La lecture clavier se rĂ©alise via la variable statique System.in, qui doit ĂȘtre convertie en flux de caractĂšres ou octets selon le contexte d'utilisation.
- Pour la lecture ou lâĂ©criture dans un fichier, on utilise des classes spĂ©cifiques comme FileInputStream, FileReader, FileOutputStream, FileWriter, en crĂ©ant un objet File Ă partir du chemin dâaccĂšs.
đĄ Ă retenir
Les flux d'entrée/sortie standard en Java, intégrés dans System (System.in, System.out, System.err), offrent une interface simple pour la communication avec l'utilisateur et la gestion des erreurs, en s'appuyant sur le paquetage java.io pour des opérations plus avancées.
đ 10. Objets Serialization Java
đ Notions clĂ©s & DĂ©finitions
- SĂ©rialisation : processus de conversion dâun objet Java en un flux dâoctets pour le stocker ou transmettre, permettant sa reconstruction ultĂ©rieure (dĂ©sĂ©rialisation).
- ObjectInputStream / ObjectOutputStream : classes de la bibliothĂšque java.io utilisĂ©es pour la dĂ©sĂ©rialisation et la sĂ©rialisation dâobjets, respectivement. (voir section 4)
- Construction des flux de sĂ©rialisation : rĂ©alisation Ă partir de FileInputStream / FileOutputStream, qui eux-mĂȘmes se construisent Ă partir dâun objet de type File, permettant de lire ou Ă©crire dans un fichier. (voir section 5 et 6)
- Méthodes writeObject() / readObject() : méthodes essentielles pour écrire un objet dans un flux ou le lire à partir de celui-ci, respectivement. Ces méthodes gÚrent la sérialisation et la désérialisation. (voir section 4)
- Niveaux dâabstraction dans la sĂ©rialisation : la sĂ©rialisation sâeffectue Ă diffĂ©rents niveaux, notamment :
- La classe ObjectInputStream / ObjectOutputStream, qui gĂšre le processus global.
- La construction Ă partir de FileInputStream / FileOutputStream.
- La construction Ă partir dâun objet File, reprĂ©sentant le fichier de stockage.
đ Points essentiels
- La sĂ©rialisation permet de sauvegarder lâĂ©tat dâun objet pour une utilisation ultĂ©rieure ou pour le transmettre via un rĂ©seau.
- La construction des flux de sĂ©rialisation suit une hiĂ©rarchie : File â FileInputStream / FileOutputStream â ObjectInputStream / ObjectOutputStream.
- La mĂ©thode writeObject() Ă©crit un objet dans le flux, tandis que readObject() lit un objet depuis le flux. Ces mĂ©thodes doivent ĂȘtre utilisĂ©es dans un contexte oĂč la classe de lâobjet est sĂ©rialisable (implĂ©mente Serializable).
- La classe ObjectInputStream ne possĂšde pas de mĂ©thode pour dĂ©tecter directement la fin du fichier ; il faut gĂ©rer cette fin via une exception EOFException lors dâune lecture.
- La sĂ©rialisation est un mĂ©canisme dâabstraction qui masque la complexitĂ© de la conversion dâobjets en flux dâoctets, en permettant une gestion simple via des mĂ©thodes spĂ©cifiques.
đĄ Ă retenir
La sĂ©rialisation en Java, via ObjectInputStream et ObjectOutputStream, repose sur une hiĂ©rarchie de flux construits Ă partir de fichiers, permettant dâĂ©crire et de lire des objets de maniĂšre abstraite et efficace, tout en gĂ©rant la fin de fichier par exceptions.
đ Tableaux de SynthĂšse
| CritÚre | Flux binaire (octets) | Flux texte (caractÚres) | Classes principales | Utilisation principale | Exemple de classe | Auteur / Référence clé |
|---|
| Type de données | Octets (binaire) | CaractÚres (texte) | InputStream / OutputStream / Reader / Writer | Fichiers binaires, flux bruts | FileInputStream, FileReader | Java API, 1996 |
| Performance | Moins performant sans tampon | Peut ĂȘtre lent sans tampon | BufferedInputStream / BufferedReader | Lecture efficace en lot | BufferedWriter, BufferedReader | Java API, 1996 |
| Codage | Pas de gestion directe du codage | Gestion du codage (Unicode) | - | Traitement de texte | InputStreamReader, OutputStreamWriter | Java API, 1996 |
| Utilisation typique | Fichiers binaires, flux bruts | Fichiers texte, interface utilisateur | - | Lecture/écriture fichiers, console | Scanner, FileReader | Java API, 1996 |
| Gestion de la fin de fichier | Nécessite des méthodes spécifiques | Méthodes comme readLine() | - | Détection de fin de flux | BufferedReader, Scanner | Java API, 1996 |
â ïž PiĂšges & Confusions FrĂ©quentes
- Confondre InputStream (octets) et Reader (caractĂšres), notamment lors du traitement de fichiers texte.
- Oublier de fermer un flux aprĂšs utilisation, entraĂźnant des fuites de ressources.
- Ne pas utiliser de tampon (buffer) pour de gros volumes de données, ce qui dégrade la performance.
- Confondre System.in (entrée standard) avec un flux de fichier, ou ne pas le gérer correctement.
- Mal gérer la fin de fichier dans ObjectInputStream ou BufferedReader, provoquant des exceptions.
- Utiliser File pour crĂ©er un flux sans vĂ©rifier lâexistence ou les droits dâaccĂšs du fichier.
- Confondre la lecture dâoctets avec la lecture de caractĂšres, notamment dans le traitement de fichiers binaires versus texte.
â
Checklist Examen
- ConnaĂźtre la dĂ©finition dâun flux (stream) selon la source et la destination, en se rĂ©fĂ©rant Ă la source (source : source).
- Savoir différencier flux binaire (InputStream, OutputStream) et flux de caractÚres (Reader, Writer).
- MaĂźtriser le rĂŽle des classes java.io.File et leur utilisation pour manipuler des fichiers.
- Expliquer le cycle de gestion dâun flux : ouverture, lecture/Ă©criture, fermeture.
- Identifier les classes principales pour la lecture et lâĂ©criture dans un fichier binaire ou texte.
- Comprendre lâutilitĂ© des classes tampon comme BufferedReader et BufferedWriter pour amĂ©liorer la performance.
- Savoir utiliser System.in, System.out, et System.err pour lâentrĂ©e/sortie standard.
- Connaßtre la classe Scanner et ses avantages pour la lecture de données structurées.
- Savoir gérer la fin de fichier lors de la lecture avec BufferedReader ou ObjectInputStream.
- Maßtriser la différence entre flux en octets et flux en caractÚres, et leur utilisation appropriée.
- ConnaĂźtre la classe java.io.Serializable pour la sĂ©rialisation dâobjets.
- Savoir crĂ©er et utiliser un flux pour la sĂ©rialisation et dĂ©sĂ©rialisation dâobjets Java.
- Connaßtre la définition de Perroux sur la croissance (si applicable dans le contenu).
- Vérifier la maßtrise du codage Unicode en Java et son impact sur la lecture/écriture de caractÚres.
- Savoir gérer les exceptions liées aux flux, notamment IOException.
- Comprendre le rÎle de close() pour libérer les ressources systÚme.
- Savoir utiliser FileInputStream et FileOutputStream pour les flux binaires.
- MaĂźtriser la lecture ligne par ligne avec BufferedReader et readLine().
- Vérifier la compréhension des flux automatiques System.in, System.out, System.err.
- Connaßtre la différence entre flux tampon et flux non tampon.
- Savoir utiliser ObjectInputStream et ObjectOutputStream pour la sĂ©rialisation dâobjets.
- Vérifier la compréhension des classes Reader et Writer pour la gestion du texte.
- Sâassurer de la maĂźtrise des concepts de flux en Java pour une gestion efficace de lâentrĂ©e/sortie.
Create your own revision sheets
Import your course and AI generates sheets, quizzes and flashcards in 30 seconds.
Sheet generator