Dies klingt vielleicht frivol, aber PrintStream
druckt auf OutputStream
, und PrintWriter
druckt auf Writer
. Ok, ich bezweifle, dass ich irgendwelche Punkte dafür bekomme, das Offensichtliche zu sagen. Aber da ist noch mehr.
Also, was ist der Unterschied zwischen einem OutputStream
und einem Writer
? Beide sind Streams, mit dem primären Unterschied, dass ein OutputStream
ist ein Strom von Bytes, während ein Writer ist ein Strom von Zeichen.
Wenn eine OutputStream
mit Bytes handelt, was ist mit PrintStream.print(String)
? Er konvertiert Zeichen mithilfe der Standard-Plattformcodierung in Bytes. Die Verwendung der Standardcodierung ist im Allgemeinen eine schlechte Sache, da sie beim Wechsel von einer Plattform zu einer anderen zu Fehlern führen kann, insbesondere wenn Sie die Datei auf einer Plattform erstellen und auf einer anderen Plattform konsumieren.
Bei einer Writer
geben Sie normalerweise die zu verwendende Codierung an und vermeiden jegliche Plattformabhängigkeiten.
Warum brauchen Sie eine PrintStream
im JDK, da die primäre Absicht ist, Zeichen zu schreiben, und nicht Bytes? PrintStream
ist älter als JDK 1.1, wenn Reader/Writer-Zeichenströme eingeführt wurden. Ich stelle mir vor, Sun hätte PrintStream
veraltet, wenn nur für die Tatsache, dass es so weit verbreitet ist. (Immerhin würden Sie nicht jeden Aufruf System.out
wollen eine veraltete api Warnung zu generieren! Auch hätte die Art PrintStream
-PrintWriter
auf den Standard-Ausgabeströme Änderung bestehender Anwendungen gebrochen.)
+1 Gute Frage, ich verwechsle auch diese beiden Klassen, und die API Doc hilft auch nicht viel. – helpermethod
Ein weiterer Unterschied ist, wie Autoflush funktioniert. Bei einem Writer löst das Vorhandensein eines \ n-Zeichens in der Ausgabe flush() aus. Aber in einem Bytestrom (PrintStream) gibt es nur Bytes. autoflush funktioniert dann wie in Javadoc beschrieben, basierend auf: "plattformeigenen Vorstellung von Zeilentrennzeichen anstelle von Zeilenvorschubzeichen". – mins