Skip Navigation Links
Accueil
Java Standard EditionExpand Java Standard Edition
Java EE 5Expand Java EE 5
Visual Basic .Net 2005Expand Visual Basic .Net 2005
Visual C++ .Net 2005Expand Visual C++ .Net 2005
Visual C# .Net 2005Expand Visual C# .Net 2005
Cours ASP .Net 2.0Expand Cours ASP .Net 2.0
PostgresqlExpand Postgresql
LinuxExpand Linux
Visual Studio 2008Expand Visual Studio 2008
ASP 3.0 ClassiqueExpand ASP 3.0 Classique
Cours Javascript - DOM - DHTMLExpand Cours Javascript - DOM - DHTML
Cours AjaxExpand Cours Ajax
VBAExpand VBA
AssembleurExpand Assembleur
PerlExpand Perl
MembresExpand Membres
L'auteur du site
Nouveautés sur le site
Contacts
Plan du site
Accueil > Java Standard Edition > E/S(3):Reader et Writer
____________________________________________________________________________________________________
Connexion

Les entrées-sorties(3) - Les classes java.io.Reader et java.io.Writer

Sommaire :

I) Généralités
II) Définition de java.io.Reader
III) Les méthodes de la classe Reader
   III-1) Les méthodes de lecture
   III-2) Les méthodes de gestion du flux
IV) Définition de java.io.Writer
   IV-1) Les méthodes d'écriture
   IV-2) Les méthodes de contrôle du flux

I) Généralités

La classe java.io.Reader est la classe de base pour lire un flux de caractères.
La classe java.io.Writer est, elle, la classe de base pour les flux de sortie de caractères.
Pourquoi les appeler par "Reader" et "Writer"? "Reader" signifie "lecteur", or un objet qui sait lire des caractères est bien un lecteur!(au sens lecteur, lectrice).
Et "Writer" veut dire "écrivain", ce qui est bien le cas d'un objet de la classe Writer, car il sait écrire des caractères!(donc des lettres).

II) Définition de java.io.Reader

Elle a le même rôle que la classe InputStream pour les flux d'entrée d'octets.
C'est une classe abstraite, qui a 3 méthodes abtraites. Elle implémente elle aussi java.io.Closeable, mais aussi java.io.Readable. Car un Readable est une source de caractère( "A readable is a source of characters.").
"The only methods that a subclass must implement are read(char[], int, int) and close(). Most subclasses, however, will override some of the methods defined here in order to provide higher efficiency, additional functionality, or both."

Les seules méthodes qu'on est forcé d'implémenter sont donc read(char[], int, int) et Close().
Toutefois, on aura souvent à redéfinir quelques unes des méthodes pour fournir une implémentation plus efficace.

Les caractères sont sur 16 bits, et utilisent le codage UNICODE.

III) Les méthodes de la classe Reader

III-1) Les méthodes de lecture

Il y a quatre méthodes de lecture.
Elle lit le prochain caractère du flux (retourne un int car c'est sur 16 bits).
Utilise read(char cbuf[], int off, int len).
Méthode bloquante. Utilise read(char cbuf[], int off, int len). Effectue juste:
return read(cbuf, 0, cbuf.length); Lit le nombre de caractères que peut contenir le tableau. Retourne un int qui est le nombre de caractères lus, qui est <= la taille du tableau.
Retourne -1 si aucun caractère n'a pu être lu.
Cette méthode n'est pas implémentée, c'est la primitive de base.
Rappelons que le type char, en java, et sur 16 bits non signés, et est codé en unicode. L'appel est bloquant.

La méthode lit len caractères, et les place à partir des l'indice off du tableau.
Utilise read(char cbuf[], int off, int len). Mets les caractères lus entre la position courante du CharBuffer(tampon de caractères), et sa limite.

III-2) Les méthodes de gestion du flux

Passe le nombre de caractères n dans le flux. Méthode bloquante.
Utilise le read(char cbuf[], int off, int len).
Permet de retenir l'endroit actuel du flux, pour y revenir avec la méthode reset. Tous les flux ne supportent pas ce système. D'ailleurs l'implémentation dans la classe Reader retourne "Marquage non supporté".
Cette méthode peut être appelée après un appel à la méthode mark. Elle permet de revenir dans l'état où était le flux au moment du mark.
Elle retourne true si la marquage est supporté par le flux, false sinon.
L'implémentation de cette méthode dans la classe Reader retourne false.
Retourne true si au moins un caractère est disponible dans le flux. Cela nous permet d'être sûr que le prochain read ne sera pas bloquant. Ceci dit, ce n'est pas une garantie absolue.
Cette méthode referme le flux.

IV) Définition de java.io.Writer

Tout comme java.io.Reader, mais pour l'écriture dans un flot de caractères.

C'est aussi une classe abstraite. Elle a 3 méthodes abtraites.
Elle implémente java.lang.Appendable, qui contient 3 méthodes append.
Et aussi Closeable et Flushable, comme pour java.io.OutputStream.

IV-1) Les méthodes d'écriture

Ecrit le caractère c. Utilise write(char cbuf[], int off, int len).
Utilise write(char cbuf[], int off, int len). Effectue un write(cbuf, 0, cbuf.length)
"Writes a portion of an array of characters.": écrit une portion d'un tableau de caractères. C'est la primitive de base, elle est particulière au flux en question, et n'est donc pas implémentée.
Utilise write(String str, int off, int len). Effectue un write(s, 0, s.length()).
"Writes a portion of a string.": écrit une portion d'une string. len est le nombre de caractères à écrire, et off est l'indice de début dans la string.
Utilise write(char cbuf[], int off, int len). Transforme la string en tableau de caractères avec la méthode d'instance getChars de la classe String.
Effectue juste un write(c). Les char sont sur 16 bits en java. Remarque: Un char est un type primitif, ce n'est pas un objet. Donc il ne vaut jamais null(ce n'est pas une référence mais une valeur).
Si la chaine n'est pas null, utilise juste write(String str), sinon effectue un write de la chaine "null";
Si la CharSequence vaut null, ceci est considéré comme une valeur prévue, et on ajoute alors la chaine "null" au flux.
Si la chaine n'est pas null, utilise juste write(String str) de la partie intéressante de la CharSequence, sinon effectue un write de la chaine "null"

IV-2) Les méthodes de contrôle du flux

Pour les flux utilisant une bufferisation lors de l'écriture, cette méthode permet d'écrire physiquement les caractères qui étaient dans le buffer.
Voir le cours sur java.io.OutputStream pour plus de précisions.
Elle referme le flux.

RETOUR HAUT