Quelle est la différence entre PrintStream
et PrintWriter
? Ils ont de nombreuses méthodes en commun grâce auxquelles je mélange souvent ces deux classes. De plus, je pense que nous pouvons les utiliser pour exactement les mêmes choses. Mais il doit y avoir une différence, sinon, il n'y aurait eu qu'une seule classe.
J'ai fouillé les archives, mais je n'ai pas trouvé cette question.
java
io
printwriter
printstream
Martijn Courteaux
la source
la source
Réponses:
Cela peut sembler désinvolte, mais
PrintStream
s'imprime sur unOutputStream
etPrintWriter
imprime sur un fichierWriter
. Ok, je doute que j'obtienne des points pour énoncer l'évidence. Mais il y a plus.Alors, quelle est la différence entre un
OutputStream
et unWriter
? Les deux sont des flux, la principale différence étant que aOutputStream
est un flux d'octets tandis que aWriter
est un flux de caractères.Si un
OutputStream
traite des octets, qu'en est-ilPrintStream.print(String)
? Il convertit les caractères en octets en utilisant le codage de plate-forme par défaut. L'utilisation de l'encodage par défaut est généralement une mauvaise chose car cela peut entraîner des bogues lors du passage d'une plateforme à une autre, surtout si vous générez le fichier sur une plateforme et le consommez sur une autre.Avec un
Writer
, vous spécifiez généralement le codage à utiliser, en évitant toute dépendance de plate-forme.Pourquoi se donner la peine d'avoir un
PrintStream
dans le JDK, puisque l'intention principale est d'écrire des caractères et non des octets?PrintStream
est antérieur à JDK 1.1 lorsque les flux de caractères Reader / Writer ont été introduits. J'imagine que Sun aurait été obsolètePrintStream
ne serait- ce que pour le fait qu'il est si largement utilisé. (Après tout, vous ne voudriez pas que chaque appel àSystem.out
génère un avertissement d'API obsolète! De plus, changer le type dePrintStream
àPrintWriter
sur les flux de sortie standard aurait interrompu les applications existantes.)la source
PrintStream
n'a pas été limité à l'utilisation de l'encodage par défaut de la plate-forme; il existe des constructeurs qui acceptent un nom de jeu de caractères. Ainsi, les distinctions entrePrintStream
etPrintWriter
sont que aPrintWriter
ne peut pas écrire d'octets bruts et les deux classes englobent différents types de destinations.PrintStream
lesprint()
méthodes d' une interface sont des fonctions pratiques qui appellentwrite()
, en tant que telles, elles déclenchent l'autoflush si elles sont activées.PrintWriter
d'autre part, ne sera pas autoflush après un appel àprint()
. J'ai fait la démonstration de Java débutants aujourd'hui et cela a surpris certains étudiants qui n'étaient pas familiers avec la nécessité de vider manuellement. Sinon, votre réponse est excellente.Avec le,
PrintStream
vous êtes bloqué sur l'encodage par défaut de la plateforme.Avec le
PrintWriter
vous pouvez cependant passer unOutputStreamWriter
avec un encodage spécifique.L'avantage est que vous pouvez contrôler le codage des caractères dans lequel les caractères doivent être écrits de sorte qu'ils ne finissent pas par devenir des mojibake .
la source
PrintStream(OutputStream out, boolean autoFlush, String encoding)
Depuis JDK 1.4, il est possible de spécifier le codage des caractères pour un PrintStream. Ainsi, les différences entre PrintStream et PrintWriter concernent uniquement le comportement de vidage automatique et qu'un PrintStream ne peut pas encapsuler un Writer.
la source
Les écrivains comme PrintWriter sont destinés à la sortie de texte, les flux sont à la sortie binaire. Les rédacteurs gèrent les jeux de caractères pour vous. Les flux ne le font pas car il est supposé que vous ne voulez pas de ce type de conversion, ce qui gâcherait vos données binaires et que vous utiliseriez un écrivain si vous le faisiez.
la source
Vous pouvez écrire des octets bruts dans un Stream et non dans un Writer. Le javadoc PrintWriter répertorie les autres différences (surtout, être capable de définir un encodage sur un flux afin qu'il puisse interpréter les octets bruts, je dirais).
la source
depuis le noyau java par Horstmann
la source
Printwriter est une amélioration du flux d'impression.
Flux d'impression IE dans un but précis.
la source