Accueil
Java Standard Edition
Java EE 5
Visual Basic .Net 2005
Visual C++ .Net 2005
Visual C# .Net 2005
Cours ASP .Net 2.0
Postgresql
Linux
Visual Studio 2008
ASP 3.0 Classique
Cours Javascript - DOM - DHTML
Cours Ajax
VBA
Assembleur
Perl
Membres
L'auteur du site
Nouveautés sur le site
Contacts
Plan du site
Exécution d'un programme
Les archives Jar
Les classes abstraites
Les interfaces
Les tableaux
La généricité
Les énumérations
Les classes internes
Classes anonymes et internes locales
Les threads: généralités
Les threads(2): synchronisation
E/S(1):InputStream et OutputStream
E/S(2):FileInputStream et FileOutputStream
E/S(3):Reader et Writer
E/S(4):FilterInputStream et FilterOutputStream
E/S(5):Les filtres d'octets: PrintStream
E/S(6):Les filtres d'octets: DataInputStream et DataOutputStream
E/S(7):Les filtres d'octets: BufferedInputStream et BufferedOutputStream
E/S(8):Flux de caractères: PrintWriter
E/S(9):Flux de caractères: FilterReader et FilterWriter
E/S(10):Flux de caractères: InputStreamReader, OutputStreamWriter, StreamDecoder, StreamEncoder
E/S(11):Flux de caractères: BufferedReader et BufferedWriter
E/S(12):Flux de caractères: FileReader et FileWriter
La classe String (java.lang)
Les collections: L'interface Collection(java.lang)
Les collections(2): L'interface List(java.util)
Les collections(3): AbstractCollection(java.util)
Les collections(4): AbstractList(java.util)
La bibliothèque Swing en Java
Les bases de données en Java
JDBC ( Java Database Connectivity )
Les interfaces graphiques
Les fichiers de configuration en Java
INSTALLATION JAVA EE 5, JRE 6, ECLIPSE, TOMCAT, ETC SOUS LINUX
INSTALLATION JAVA EE 5, JRE 6, ECLIPSE, TOMCAT, ETC SOUS WINDOWS
Les applications Web en java
Les filtres Java (javax.servlet.Filter)
I Généralités
I.1 Le formulaire principal
I.2 Les objets créés par Visual
I.3 Les variables références
I.4 Le garbage collector
II Créer évènements
II.1 Rappel évènements
II.2 Procédure à suivre
II.2.1 Créer son EventArgs
II.2.2 Créer EmetEvent
II.2.3 Déclarations autres
I Généralités
I.1 Applications winforms
I.2 Applications MFC
I.3 Objets managés ou pas
I.4 Objets non managés
I.5 Objets managés - handle
I.6 Le top-level ^
II Créer évènements
II.1 Rappel évènements
II.2 Procédure à suivre
II.2.1 Créer son EventArgs
II.2.2 Créer EmetEvent
II.2.3 Déclarations autres
I Généralités
I.1 Puissant et Accessible
I.2 Créer ses classes
II Créer évènements
II.1 Rappel évènements
II.2 Procédure à suivre
III Les services Windows
IV Le .net remoting
V Communication Tcp avec TcpClient et TcpListener
II.2.1 Créer son EventArgs
II.2.2 Créer EmetEvent
II.2.3 Déclarations autres
I Généralités
I.1 Un EDI formidable
I.2 Inclure C# ou VB
I.3 L'objet Response
I.4 Les évènements
II ASP .net et les bdd
II.1 Essayer plusieurs fois la requête
I 2.1 Fichiers distincts
I.2.2 Avec la balise script
I.2.3 Inclure réellement
I.2.4 Avec Response.Write()
I.3.1 La méthode Response.Redirect()
I.4.1 Résoudre problème post
Installation Postgre Linux
Cours Postgresql
Le Shell Unix( Linux, Ubuntu)
Les scripts C-Shell
Programmation système Unix
Reseau Linux
Les iptables
Windows Presentation Foundation(WPF)
Le Framework 3.0
Windows Workflow Foundation(WF)
ASP 3.0 Classique
Cours Javascript - DOM - DHTML
Chat Ajax
VBA Excel 2003
Assembleur
Perl
Inscription
Liste membres
Livre d'or
Forum
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
public abstract class Reader implements Readable, Closeable;
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.").
public interface Readable { public int read(java.nio.CharBuffer cb) throws IOException; }
"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.
public int read() throws IOException;
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).
public int read(char cbuf[]) throws IOException;
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.
abstract public int read(char cbuf[], int off, int len) throws IOException;
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.
public int read(java.nio.CharBuffer target);
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
public long skip(long n) throws IOException;
Passe le nombre de caractères n dans le flux. Méthode bloquante.
Utilise le read(char cbuf[], int off, int len).
public void mark(int readAheadLimit) throws IOException;
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é".
public void reset() throws IOException;
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.
public boolean markSupported();
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.
public boolean ready() throws IOException;
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.
abstract public void close() throws IOException;
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.
public abstract class Writer implements Appendable, Closeable, Flushable;
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
public void write(int c) throws IOException;
Ecrit le caractère c. Utilise write(char cbuf[], int off, int len).
public void write(char cbuf[]) throws IOException;
Utilise write(char cbuf[], int off, int len). Effectue un write(cbuf, 0, cbuf.length)
abstract public void write(char cbuf[], int off, int len) throws IOException;
"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.
public void write(String str) throws IOException;
Utilise write(String str, int off, int len). Effectue un write(s, 0, s.length()).
public void write(String str, int off, int len) throws IOException;
"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.
public Writer append(char c) throws IOException;
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).
public Writer append(CharSequence csq);
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.
public Writer append(CharSequence csq, int start, int end) throws IOException;
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
abstract public void flush() throws IOException;
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.
abstract public void close() throws IOException;
Elle referme le flux.
RETOUR HAUT