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(10):Flux de caractères: InputStreamReader, OutputStreamWriter, StreamDecoder, StreamEncoder
____________________________________________________________________________________________________
Connexion
Les entrées/sorties(10): Flux de caractères: InputStreamReader, OutputStreamWriter, StreamEncoder, StreamDecoder
Sommaire :
I) Généralités
II) InputStreamReader(java.io) et StreamDecoder(sun.nio.cs)
III) OutputStreamWriter(java.io) et StreamEncoder(sun.nio.cs)
III-1) OutputStreamWriter(java.io)
III-2) StreamEncoder(sun.nio.cs)
I) Généralités
Les classes InputStreamReader et OutputStreamWriter sont des classes qui servent de pont entre les flux d'octets et les flux de caractères. Les flux de caractères n'existant pas nativement sur les ordinateurs(qui ne connaissent que les flux d'octets), il est normal qu'on ait besoin de ponts entre les deux types de flux.
InputStreamReader et OutputStreamWriter fonctionnent sur le même principe.
Toutes deux possèdent un attribut privé de type StreamEncoder ou StreamDecoder, qui héritent de Reader ou Writer. Ce StreamEncoder ou StreamDecoder est construit à partir du flux d'octets d'entrée ou de sortie d'origine.
Nous ne détaillerons pas trop le principe de InputStreamReader et de StreamDecoder, qui sont basés sur le modèle de OutputStreamWriter et StreamEncoder, qui ont déjà été expliqués en détail.
II) InputStreamReader(java.io) et StreamDecoder(sun.nio.cs)
public class InputStreamReader extends Reader public class StreamDecoder extends Reader
La classe InputStreamReader hérite de Reader. C'est en réalité un filtre car elle lit à partir d'un flux binaire sous-jacent. Tout est basé sur la classe sun.nio.cs.StreamDecoder, qui hérite de Reader. StreamDecoder permet, elle, de décoder un flux binaire sous-jacent, c'est elle qui fait vraiment le travail. C'est elle-même un filtre sans le dire, car elle travaille à partir des données d'un flux binaire d'entrée sous-jacent. On peut avoir l'impression de double emploi entre la classe StreamDecoder et InputStreamReader, car elles font la même chose! Cependant StreamDecoder contient l'implémentation même du décodage des octets en caractères(suivant le jeu de caractères utilisé), alors que InputStreamReader ne contient aucune implémentation à ce sujet. Le code de InputStreamReader est donc beaucoup plus lisible, et dégagé de cet implémentation complexe.
De plus, InputStreamReader est indépendant de l'implémentation utilisée pour résoudre de problème( il utilise juste un décodeur). Le concept associé à StreamDecoder est de décoder un flux binaire, tandis que la notion associée à InputStreamReader est de passer d'un flux binaire à un flux de caractères.
Revenons à InputStreamReader: elle a le même modèle que OutputStreamWriter, donc nous n'y reviendrons pas en détail.
Ses quatre constructeurs demandent chacun un InputStream. Le principe est de se créer un objet StreamDecoder, qu'on utilisera à chaque fois comme un simple Reader. Seulement ce Reader lira à partir du InputStream.
Pour le détail de InputStreamReader et StreamDecoder, voyez les explications suivantes sur OutputStreamWriter et StreamEncoder.
/* * @(#)InputStreamReader.java 1.47 05/11/17 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package java.io; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import sun.nio.cs.StreamDecoder; /** * An InputStreamReader is a bridge from byte streams to character streams: It * reads bytes and decodes them into characters using a specified {@link * java.nio.charset.Charset <code>charset</code>}. The charset that it uses * may be specified by name or may be given explicitly, or the platform's * default charset may be accepted. * * <p> Each invocation of one of an InputStreamReader's read() methods may * cause one or more bytes to be read from the underlying byte-input stream. * To enable the efficient conversion of bytes to characters, more bytes may * be read ahead from the underlying stream than are necessary to satisfy the * current read operation. * * <p> For top efficiency, consider wrapping an InputStreamReader within a * BufferedReader. For example: * * <pre> * BufferedReader in * = new BufferedReader(new InputStreamReader(System.in)); * </pre> * * @see BufferedReader * @see InputStream * @see java.nio.charset.Charset * * @version 1.47, 05/11/17 * @author Mark Reinhold * @since JDK1.1 */ public class InputStreamReader extends Reader { private final StreamDecoder sd; /** * Creates an InputStreamReader that uses the default charset. * * @param in An InputStream */ public InputStreamReader(InputStream in) { super(in); try { sd = StreamDecoder.forInputStreamReader(in, this, (String)null); // ## check lock object } catch (UnsupportedEncodingException e) { // The default encoding should always be available throw new Error(e); } } /** * Creates an InputStreamReader that uses the named charset. * * @param in * An InputStream * * @param charsetName * The name of a supported * {@link java.nio.charset.Charset </code>charset<code>} * * @exception UnsupportedEncodingException * If the named charset is not supported */ public InputStreamReader(InputStream in, String charsetName) throws UnsupportedEncodingException { super(in); if (charsetName == null) throw new NullPointerException("charsetName"); sd = StreamDecoder.forInputStreamReader(in, this, charsetName); } /** * Creates an InputStreamReader that uses the given charset. </p> * * @param in An InputStream * @param cs A charset * * @since 1.4 * @spec JSR-51 */ public InputStreamReader(InputStream in, Charset cs) { super(in); if (cs == null) throw new NullPointerException("charset"); sd = StreamDecoder.forInputStreamReader(in, this, cs); } /** * Creates an InputStreamReader that uses the given charset decoder. </p> * * @param in An InputStream * @param dec A charset decoder * * @since 1.4 * @spec JSR-51 */ public InputStreamReader(InputStream in, CharsetDecoder dec) { super(in); if (dec == null) throw new NullPointerException("charset decoder"); sd = StreamDecoder.forInputStreamReader(in, this, dec); } /** * Returns the name of the character encoding being used by this stream. * * <p> If the encoding has an historical name then that name is returned; * otherwise the encoding's canonical name is returned. * * <p> If this instance was created with the {@link * #InputStreamReader(InputStream, String)} constructor then the returned * name, being unique for the encoding, may differ from the name passed to * the constructor. This method will return <code>null</code> if the * stream has been closed. * </p> * @return The historical name of this encoding, or * <code>null</code> if the stream has been closed * * @see java.nio.charset.Charset * * @revised 1.4 * @spec JSR-51 */ public String getEncoding() { return sd.getEncoding(); } /** * Reads a single character. * * @return The character read, or -1 if the end of the stream has been * reached * * @exception IOException If an I/O error occurs */ public int read() throws IOException { return sd.read(); } /** * Reads characters into a portion of an array. * * @param cbuf Destination buffer * @param offset Offset at which to start storing characters * @param length Maximum number of characters to read * * @return The number of characters read, or -1 if the end of the * stream has been reached * * @exception IOException If an I/O error occurs */ public int read(char cbuf[], int offset, int length) throws IOException { return sd.read(cbuf, offset, length); } /** * Tells whether this stream is ready to be read. An InputStreamReader is * ready if its input buffer is not empty, or if bytes are available to be * read from the underlying byte stream. * * @exception IOException If an I/O error occurs */ public boolean ready() throws IOException { return sd.ready(); } public void close() throws IOException { sd.close(); } }
III) OutputStreamWriter(java.io) et StreamEncoder(sun.nio.cs)
public class OutputStreamWriter extends Writer public class StreamEncoder extends Writer
Nous avons vu ces classes à l'occasion des flux d'octets
III-1)
OutputStreamWriter (java.io)
(lien vers autre page)
III-2)
StreamEncoder (sun.nio.cs)
(lien vers autre page)
RETOUR HAUT