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(6):Les filtres d'octets: DataInputStream et DataOutputStream
____________________________________________________________________________________________________
Connexion

Les entrées-sorties(6) - Les classes héritant de FilterInputStream et FilerOutputStream: DataInputStream et DataOutputStream

Sommaire :

I) Généralités
II) La classe DataOutputStream(java.io)
   II-1) Les méthodes d'écriture
III) La classe DataInputStream(java.io)
   III-1) Les méthodes de lecture

I) Généralités

Poursuivons l'étude des filtres d'octets, avec les classes DataInputStream et DataOutputStream du package java.io.
Elles héritent respectivement de java.io.FilterInputStream et java.io.FilterOutputStream.
DataOutputStream permet d'écrire des types primitifs dans un flux d'octets sous-jacent(c'est donc un filtre), d'une façon indépendante de la machine, c'est à dire portable. N'importe quelle application java, tournant sur n'importe quelle machine, sera capable de lire ces données, avec DataInputStream. Et rappelons qu'un flux d'octets peut être autre chose qu'un fichier, par exemple une socket.

II) La classe DataOutputStream(java.io)

Elle permet d'écrire des données d'un type primitif java, dans le flux d'octets, et d'une façon portable. Ces données pourront être lues avec DataOutputStream.

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

Regardons les méthodes caractéristiques de la classe:

Aurapavant, attardons-nous une minute sur ceci:
written est une propriété protected de type int, qui sera incrémentée du nombre correspondant au nombre d'octets écrits, à chaque appel à une méthode write. L'incrémentation se fait grâce à la méthode privée incCount. La méthode publique size() retourne la valeur de written, qui est d'ailleurs = Integer.MAX_VALUE en cas de dépassement de capacité. Remarquons que le seul constructeur de la classe, qui est DataOutputStream(OutputStream out), ne met pas written à zéro, car en java une propriété int est initialisée automatiquement à zéro à l'instanciation de l'objet. written vaut donc zéro à l'instantiation du DataOutputStream, et comptera tous les octets écrits depuis ce moment.

Ce point éclairci, nous pouvons regarder les méthodes de lecture les plus importantes:
Le codage choisi pour les booléens est un octet 1 pour true, et 0 pour false.
Pour écrire un seul octet, pas de problème de codage!
Un short java est sur 16 bits. Le codage "machine-indépendant" choisi pour les short est d'écrire l'octet de poids fort en premier, puis l'octet de poids faible.
Un int java est sur 32 bits. Le codage "machine-indépendant" choisi pour les int est d'écrire les octets de poids le plus forts aux octets de poids le plus faible.
Un long java est sur 8 octets. Comme pour les int et les short, on écrit les 8 octets, en commençant par celui de poids le plus fort, jusqu'à celui de poids le plus faible.
Le float est d'abord converti en int selon le standard IEEE 754, puis les 4 octets de l'int sont écrits dans le flux avec la méthode writeInt.
Le double est d'abord converti en long, d'après le standard IEEE 754. Le long obtenu est ensuite écrit dans le flux, avec la méthode writeLong.

III) La classe DataInputStream(java.io)

Elle permet de lire des données d'un type primitif, à partir d'un flux d'octets sous-jacent. Les données doivent avoir été écrites par DataOutputStream, et sont donc machine-indépendantes.

III-1) Les méthodes de lecture

Regardons les méthodes caractéristiques:
La méthode retourne un short. On lit le premier octet dans ch1, puis le deuxième octet dans ch2. Puis on retourne un short dont l'octet de poids fort et le premier octet lu, et dont l'octet de poids faible est le second octet lu. C'est donc l'opération inverse du codage réalisé par writeShort de DataOutputStream.
Même principe que pour le readShort. On lit 4 octets. Puis on renvoie l'int composé avec les 4 octets lus, les premiers lus étant les octets de poids le plus fort, jusqu'au plus poids le plus faible.
On lit un int. Puis on retourne le float résultant de l'appel à Float.intBitsToFloat, qui est à la norme IEEE 754.
On lit un long. Ensuite on retourne le double résultant de l'appel à Double.longBitsToDouble, qui est à la norme IEEE 754.

RETOUR HAUT