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(1):InputStream et OutputStream
____________________________________________________________________________________________________
Connexion
Java SE - Les entrées sorties(1): Les classes java.io.InputStream et java.io.OutputStream
Sommaire :
I) Généralités
II) La classe java.io.InputStream
II-1) Les méthodes de lecture de java.io.InputStream
II-2) Les méthodes de gestion du flux d'entrée
III) La classe java.io.OutputStream
III-1) Les méthodes d'écriture de java.io.OutputStream
III-2) Les méthodes de gestion du flux de sortie
I) Généralités
- Toutes les classes pour les entrées/sorties sont contenues dans le package java.io.
- Les classes fondamentales pour les flux d'octets, qui servent de classe mère aux autres, sont java.io.InputStream, ainsi que java.io.OutputStream. Ces deux classes sont abstraite.
II) La classe java.io.InputStream
C'est la classe mère de toutes les classes qui représentent un flux d'octets d'entrée. Elle est abstraite.
Javadoc de InputStream:
"This abstract class is the superclass of all classes representing an input stream of bytes.".
La seule méthode abstraite de InputStream est la méthode:
public abstract int read() throws IOException;
Javadoc de InputStream:"
Applications that need to define a subclass of InputStream must always provide a method that returns the next byte of input."
Cette méthode read lit le prochain octet du flux d'entrée. Et elle est bloquante.
Javadoc de InputStream:
"Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.".
C'est une utilisation classique des classes abstraites: la ou les méthodes spécifiques ne sont pas implémentées, comme la méthode surface d'une classe abstraite figure géométrique. Ici chaque flux d'entrée spécifique implémentera la façon dont on lit, pour son cas, le prochain octet dans le flux.
Toutes les autres méthodes sont communes quelque soit le flux d'entrée.
Le code source de InputStream est court. La classe implémente uniquement l'interface java.io.Closeable:
public abstract class InputStream implements Closeable
II-1) Les méthodes de lecture de java.io.InputStream
public abstract int read() throws IOException;
Elle lit le prochain octet du flux. Elle est bloquante.
Retourne -1 si aucun octet n'a pu être lu en raison de fin de flux.
public int read(byte b[]) throws IOException;
Lit le nombre d'octets correspondant à la taille du tableau. Elle est bloquante. Effectue en réalité uniquement
read(b, 0, b.length);
Retourne -1 si aucun octet n'a pu être lu en raison de fin de flux.
public int read(byte b[], int off, int len) throws IOException;
Comme la méthode précédente, mais plus générale. Bien sûr, elle est basée sur la méthode read(). Et elle effectue un for.
La javadoc de la méthode précise que les superclasses sont encouragées à redéfinir cette méthode afin de fournir une implémentation plus efficace.
II-2) Les méthodes de gestion du flux d'entrée
public long skip(long n) throws IOException;
Passe le nombre d'octets passé en argument. Elle retourne le nombre d'octets qu'elle à pu passer.
Cette méthode utilise la méthode read(byte b[], int off, int len).
public int available() throws IOException;
Retourne le nombre d'octets pouvant être lus sans bloquer, si on effectuait une lecture à ce moment-là. A noter que les superclasses doivent la redéfinir, car elle ne fait que retourner 0.
"This method should be overridden by subclasses"
public synchronized void mark(int readlimit);
Si le type de flux supporte le marquage ("mark/reset supported"), cette méthode retient la position courante du flux, pour pouvoir y retourner par un futur appel à la méthode reset.
La méthode marque est vide pour InputStream, car cette classe ne supporte pas le marquage.
Le paramètre readlimit : si plus de readlimit octets sont lus avant l'appel au reset, la classe n'est plus tenu de retenir le marquage.
Et le reset fera une IOException. C'est à dire que readlimit est la taille du plus grand retour en arrière possible.
public synchronized void reset() throws IOException;
Cette méthode est utilisable d'abord si le flux supporte le marquage.
Il faut ensuite que la méthode mark ait été appelé auparavant.
Cela effectue un retour, dans le stream, à la postion marquée.
La méthode reset de InputStream ne fait que déclencher l'IOException("mark/reset not supported").
public boolean markSupported();
Retourne true si le marquage est supporté, faux sinon.
Pour InputStream, cela retourne false.
public void close() throws IOException;
Sert à fermer le flux. Le close de InputStream ne fait rien.
III) La classe java.io.OutputStream
Comme l'indique la javadoc, c'est la classe mère de toutes les classes représentant un flux d'octets de sortie.
Le code de la classe est encore plus court que celui de la classe java.io.InputStream .
III-1) Les méthodes d'écriture de java.io.OutputStream
public abstract class OutputStream implements Closeable, Flushable;
Il s'agit d'une classe abstraite, avec une seule méthode abstraite:
public abstract void write(int b) throws IOException;
écrit l'octet b dans le flux de sortie. Le paramètre est sur 32 bits, les 24 bits de poids le plus fort sont ignorés.
Il s'agit de la primitive de base, qui doit par conséquent être implémentée par chaque flux qui hérite de la classe mère.
public void write(byte b[], int off, int len);
Ecrit les len octets du tableau b( à partir de l'indice off) vers le flux de sortie.
L'implémentation de OutputStream de cette méthode se base sur la méthode write(int b).
La javadoc de la méthode précise que les superclasses sont encouragées à redéfinir cette méthode afin de fournir une implémentation plus efficace.
public void write(byte b[]) throws IOException;
Ecrit b.length octets du tableau b vers le flux de sortie.
Effectue uniquement un:
write(b, 0, b.length);
III-2) Les méthodes de gestion du flux de sortie
public void flush() throws IOException;
Cette méthode concerne les types de flux où il y a une bufferisation de l'écriture des données. Elle permet d'écrire physiquement les octets qui restaient dans le buffer. Pour les flux de sortie qui sont une abstraction procurée par le système d'exploitation(par exemple un fichier), vider le buffer signifiera alors passer les données au système d'exploitation pour qu'il les écrive, qui ne les écrira pas forcément physiquement tout de suite.
public void close() throws IOException;
Ferme le flux de sortie. Un flux de sortie fermé ne peut pas être réouvert.
RETOUR HAUT