1. OutputStream
classe
Nous venons tout juste d'explorer les flux d'entrée. Il est temps de parler des flux de sortie.
La OutputStream
classe est la classe parente de toutes les classes prenant en charge la sortie d'octets. Il s'agit d'une classe abstraite qui ne fait rien par elle-même, mais elle a des classes descendantes pour chaque occasion.
Cela semble extrêmement compliqué. Pour le dire plus simplement, cette classe fonctionne sur des octets, et non, par exemple, sur des caractères ou d'autres types de données. Et le fait qu'il soit abstrait signifie que nous ne l'utilisons généralement pas, mais plutôt l'une de ses classes descendantes. Par exemple, FileOutputStream
etc.
Mais revenons à la OutputStream
classe. Cette classe a des méthodes que toutes ses classes descendantes doivent implémenter. Voici les principaux :
Méthodes | Description |
---|---|
|
Écrit un octet (pas un int ) dans le flux. |
|
Écrit un tableau d'octets dans le flux |
|
Écrit une partie d'un tableau d'octets dans le flux |
|
Écrit toutes les données stockées dans le tampon dans le flux |
|
Ferme le flux |
Lorsque vous créez un objet d'une classe qui hérite de InputStream
, vous spécifiez généralement un objet source à InputStream
partir duquel lit les données. Lorsque vous créez un objet d'une classe qui hérite de OutputStream
, vous spécifiez également généralement l'objet ou le flux cible dans lequel les données seront écrites.
Passons brièvement en revue toutes les méthodes de la OutputStream
classe :
write(int b)
méthode
Cette méthode écrit un octet (pas un int
) dans le flux de sortie. La valeur transmise est convertie en un octet et les trois premiers octets de l'int sont ignorés.
write(byte[] buffer)
méthode
Écrit le tableau d'octets donné dans le flux de sortie. C'est ça.
write(byte[] buffer, int offset, int length)
méthode
Écrit une partie du tableau d'octets transmis dans le flux de sortie. La variable offset indique l'index du premier élément du tableau, et length
est la longueur du sous-ensemble à écrire.
flush()
méthode
La flush()
méthode est utilisée pour forcer toutes les données potentiellement mises en mémoire tampon dans le flux actuel à être écrites dans le flux cible. Ceci est pertinent lors de l'utilisation de la mise en mémoire tampon et/ou de plusieurs objets de flux disposés en chaîne.
close()
méthode
Écrit toutes les données non écrites dans l'objet cible. La close()
méthode n'a pas besoin d'être appelée si vous utilisez un try-with-resources
bloc.
Exemple de copie d'un fichier
Code | Note |
---|---|
|
InputStream pour lire à partir d'un fichier OutputStream pour écrire dans un fichier Tampon dans lequel nous allons lire les données Tant qu'il y a des données dans le flux Lire les données dans le tampon Écrire les données du tampon dans le second flux |
2. Writer
classe
La Writer
classe est exactement la même que la OutputStream
classe, mais juste une différence encore une fois : elle fonctionne avec des caractères ( char
) au lieu d'octets.
Il s'agit d'une classe abstraite : vous ne pouvez pas créer d'objets de la Writer
classe. Son objectif principal est d'être une classe parente commune pour des centaines de classes descendantes et de leur donner des méthodes communes pour travailler avec des flux de caractères.
Méthodes de la Writer
classe (et de toutes ses classes descendantes) :
Méthodes | Description |
---|---|
|
Écrit un caractère (pas un int ) dans le flux. |
|
Écrit un tableau de caractères dans le flux |
|
Écrit une partie d'un tableau de caractères dans le flux |
|
Écrit une chaîne dans le flux |
|
Écrit une partie d'une chaîne dans le flux |
|
Écrit toutes les données stockées dans le tampon dans le flux |
|
Ferme le flux |
Les méthodes sont très similaires aux méthodes de la OutputStream
classe, mais elles fonctionnent avec des caractères au lieu d'octets.
Description des méthodes :
write(int b)
méthode
Cette méthode écrit un seul caractère ( char
— pas un int
) dans le flux de sortie. La valeur transmise est convertie en a char
et les deux premiers octets sont ignorés.
write(char[] buffer)
méthode
Écrit le tableau de caractères donné dans le flux de sortie.
write(char[] buffer, int offset, int length)
méthode
Écrit une partie du tableau de caractères transmis dans le flux de sortie. La offset
variable indique l'index du premier élément du tableau, et length
est la longueur du sous-ensemble à écrire.
write(String str)
méthode
Écrit la chaîne donnée dans le flux de sortie.
write(String str, int offset, int length)
méthode
Écrit une partie de la chaîne donnée dans le flux de sortie : la chaîne est convertie en un tableau de caractères. La offset
variable indique l'index du premier élément du tableau, et length
est la longueur du sous-ensemble à écrire.
flush()
méthode
La flush()
méthode est utilisée pour forcer toutes les données potentiellement mises en mémoire tampon dans le flux actuel à être écrites dans le flux cible. Ceci est pertinent lors de l'utilisation de la mise en mémoire tampon et/ou de plusieurs objets de flux disposés en chaîne.
close()
méthode
Écrit toutes les données non écrites dans l'objet cible. La close()
méthode n'a pas besoin d'être appelée si vous utilisez un try-with-resources
bloc.
Exemple de programme qui copie un fichier texte :
Code | Note |
---|---|
|
Reader pour lire à partir d'un fichier Writer pour écrire dans un fichier Tampon dans lequel nous allons lire les données Tant qu'il y a des données dans le flux Lire les données dans un tampon Écrire les données du tampon dans le second flux |
StringWriter
classe
Il existe une autre classe intéressante qui hérite de la Writer
classe : elle s'appelle StringWriter
. Il contient une chaîne mutable — un StringBuffer
objet. Et chaque fois que vous "écrivez" quelque chose dans l' StringWriter
objet, le texte est simplement ajouté à son tampon interne.
Exemple:
Code | Note |
---|---|
|
Un flux de caractères cible ( StringWriter ) est créé Une chaîne est écrite dans le tampon à l'intérieur du StringWriter Une chaîne est écrite dans le tampon à l'intérieur du StringWriter Convertir le contenu d'un objet en une chaîne |
Dans ce cas, la StringWriter
classe est essentiellement un wrapper sur la StringBuffer
classe, mais la StringWriter
classe est un descendant de la Writer
classe stream, et elle peut être utilisée dans des chaînes d'objets stream. C'est une propriété assez utile dans la pratique.
GO TO FULL VERSION