Java InputStreamReader expliqué : Méthodes, encodage et exemples pratiques
Java InputStreamReader expliqué : Méthodes, encodage et exemples pratiques
La classe InputStreamReader dans java.io convertit des octets bruts en caractères, la rendant essentielle pour lire des fichiers texte, flux réseau ou toute source d'octets représentant des caractères.
Elle étend la classe abstraite Reader et fait le pont entre flux d'octets (ex: FileInputStream) et flux de caractères.
Lorsqu'un caractère nécessite plusieurs octets — comme du texte encodé UTF-8 ou UTF-16 — InputStreamReader lit ces octets ensemble et produit le caractère correct.
Création d'un InputStreamReader
Importez la classe nécessaire :
import java.io.InputStreamReader;
L'instanciation typique utilise un FileInputStream comme source d'octets sous-jacente :
FileInputStream fichier = new FileInputStream("exemple.txt");
InputStreamReader reader = new InputStreamReader(fichier);
Si vous connaissez l'encodage du fichier, spécifiez-le pour éviter les interprétations erronées :
InputStreamReader reader = new InputStreamReader(fichier, Charset.forName("UTF-8"));
L'utilisation de Charset garantit que le lecteur interprète les octets avec le jeu de caractères prévu.
Méthodes principales d'InputStreamReader
read()
int read()– Lit un seul caractèreint read(char[] cbuf)– Remplit un tableau avec des caractèresint read(char[] cbuf, int off, int len)– Lit jusqu'àlencaractères danscbufà partir deoff
Exemple : Lecture d'un fichier texte dans un tableau de caractères.
import java.io.*;
class Main {
public static void main(String[] args) {
char[] tampon = new char[100];
try (FileInputStream fichier = new FileInputStream("input.txt");
InputStreamReader reader = new InputStreamReader(fichier)) {
reader.read(tampon);
System.out.println("Données dans le flux :\n" + new String(tampon));
} catch (IOException e) {
e.printStackTrace();
}
}
}
Sortie
Données dans le flux : Ceci est une ligne de texte dans le fichier.
getEncoding()
Récupère l'encodage utilisé par le lecteur :
InputStreamReader lecteurDefaut = new InputStreamReader(fichier);
InputStreamReader lecteurUtf8 = new InputStreamReader(fichier, Charset.forName("UTF-8"));
System.out.println("Encodage par défaut : " + lecteurDefaut.getEncoding());
System.out.println("Encodage UTF-8 : " + lecteurUtf8.getEncoding());
Sortie
Encodage par défaut : Cp1252 Encodage UTF-8 : UTF-8
Sans encodage spécifié, getEncoding() renvoie le jeu de caractères par défaut de la plateforme.
Note : Utilisez Charset.forName() pour des encodages explicites. Voir la documentation Java Charset.
close()
Fermez toujours le lecteur après utilisation. Le construct try-with-resources ci-dessus le gère automatiquement, mais vous pouvez aussi appeler reader.close() explicitement.
Autres méthodes utiles
| Méthode | Description |
|---|---|
ready() | Vérifie si le flux est prêt pour la lecture |
mark(int readAheadLimit) | Marque la position courante pour réinitialisation ultérieure |
reset() | Revient à la dernière position marquée |
Pour une référence complète, visitez la page officielle InputStreamReader.
Java
- Comprendre le mot-clé final en Java : variables, méthodes et classes
- L'opérateur instanceof en Java : guide complet
- Comprendre les classes imbriquées statiques en Java : utilisation, différences et exemples
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Le pattern Singleton en Java expliqué : implémentation et utilisation sûre
- Maîtriser la réflexion Java : inspection des classes, méthodes et champs à l'exécution
- Maîtriser Java ObjectOutputStream : Sérialisation, méthodes et exemples pratiques
- Maîtriser Java Scanner : Guide complet avec exemples pratiques
- Maîtriser les génériques Java : Construire du code réutilisable et type-safe