Je n’arrive pas à déterminer une différence entre InputStreamReader
et FileReader
plus de la façon dont les deux sont initialisés. Y a-t-il un avantage à utiliser l’un ou l’autre? La plupart des autres articles couvrent FileInputStream
vs InputStreamReader
, mais je contraste avec FileReader
place. Il me semble qu’ils ont tous deux le même but.
Tout d’abord, InputStreamReader
peut gérer tous les stream d’entrée, pas seulement les fichiers. D’autres exemples sont les connexions réseau, les ressources classpath et les fichiers ZIP.
Deuxièmement, FileReader
ne vous permet pas de spécifier un encodage et utilise à la place l’encodage par défaut de la plaquette, ce qui le rend pratiquement inutile car son utilisation entraînera des données corrompues lorsque le code est exécuté sur des systèmes avec des codages par défaut différents.
En bref, oubliez que FileReader
existe.
FileReader lit les caractères d’un fichier du système de fichiers. InputStreamReader lit les caractères de tout type de stream d’entrée. Le stream serait un FileInputStream, mais pourrait aussi être un stream obtenu à partir d’un socket, d’une connexion HTTP, d’un blob de firebase database, etc.
Je préfère généralement utiliser un InputStreamReader enveloppant un fichier FileInputStream pour lire un fichier car il permet de spécifier un codage de caractères spécifique.
FileReader étend InputStreamReader. La seule différence est que FileReader a des constructeurs qui supposent que vous lisez un fichier tel que Ssortingng filename
, FileDescriptor fd
et FileDescriptor fd
Je vous suggère de consulter la source de FileReader pour en savoir plus.