Was ist der Unterschied zwischen PrintStream
und PrintWriter
? Sie haben viele Methoden gemeinsam, weshalb ich diese beiden Klassen oft verwechsle. Darüber hinaus denke ich, dass wir sie für genau die gleichen Dinge verwenden können. Aber es muss einen Unterschied geben, sonst hätte es nur eine Klasse gegeben.
Ich habe die Archive durchsucht, konnte diese Frage jedoch nicht finden.
java
io
printwriter
printstream
Martijn Courteaux
quelle
quelle
Antworten:
Dies mag flippig klingen, wird jedoch
PrintStream
auf aOutputStream
und auf aPrintWriter
gedrucktWriter
. Ok, ich bezweifle, dass ich Punkte bekomme, um das Offensichtliche zu sagen. Aber es gibt noch mehr.Also, was ist der Unterschied zwischen einem
OutputStream
und einemWriter
? Beide sind Streams, wobei der Hauptunterschied darin besteht, dass aOutputStream
ein Stream von Bytes ist, während aWriter
ein Stream von Zeichen ist.Wenn sich ein
OutputStream
mit Bytes befasst, was ist dannPrintStream.print(String)
? Es konvertiert Zeichen in Bytes unter Verwendung der Standardplattformcodierung. Die Verwendung der Standardcodierung ist im Allgemeinen eine schlechte Sache, da sie beim Wechsel von einer Plattform auf eine andere zu Fehlern führen kann, insbesondere wenn Sie die Datei auf einer Plattform generieren und auf einer anderen verbrauchen.Mit a geben
Writer
Sie normalerweise die zu verwendende Codierung an, um Plattformabhängigkeiten zu vermeiden.Warum sollte man sich die Mühe machen, ein
PrintStream
im JDK zu haben, da die Hauptabsicht darin besteht, Zeichen und keine Bytes zu schreiben?PrintStream
älter als JDK 1.1, als Reader / Writer-Zeichenströme eingeführt wurden. Ich stelle mir vor, Sun wäre veraltet,PrintStream
wenn es nur so weit verbreitet gewesen wäre. (Schließlich möchten Sie nicht, dass jeder AufrufSystem.out
eine veraltete API-Warnung generiert! Außerdem hätte das Ändern des Typs vonPrintStream
aufPrintWriter
in den Standardausgabestreams vorhandene Anwendungen beschädigt.)quelle
PrintStream
wurde nicht auf die Verwendung der Plattform-Standardcodierung beschränkt. Es gibt Konstruktoren, die einen Zeichensatznamen akzeptieren. Daher besteht der Unterschied zwischenPrintStream
und darin,PrintWriter
dass aPrintWriter
keine Rohbytes schreiben kann und die beiden Klassen unterschiedliche Arten von Zielen umschließen.PrintStream
s‘print()
Methoden sind Funktionen , die Bequemlichkeit Anrufwrite()
, als solche Autoflushing auslösen , wenn aktiviert.PrintWriter
Auf der anderen Seite wird nach einem Anruf bei nicht automatisch gespültprint()
. Ich habe heute einige Java-Anfänger demonstriert, und dies hat einige Schüler herausgeholt, die mit der Notwendigkeit des manuellen Spülens nicht vertraut waren. Ansonsten ist deine Antwort großartig.Mit dem
PrintStream
bleiben Sie bei der Standardcodierung der Plattform.Mit dem können
PrintWriter
Sie jedoch eineOutputStreamWriter
mit einer bestimmten Codierung übergeben.Der Vorteil ist, dass Sie die Zeichensteuerung steuern können, in die die Zeichen geschrieben werden sollen, damit sie nicht als Mojibake enden .
quelle
PrintStream(OutputStream out, boolean autoFlush, String encoding)
Seit JDK 1.4 ist es möglich, die Zeichenkodierung für einen PrintStream anzugeben. Daher bestehen die Unterschiede zwischen PrintStream und PrintWriter nur im automatischen Spülverhalten und darin, dass ein PrintStream einen Writer nicht umschließen kann.
quelle
Writer wie PrintWriter dienen zur Textausgabe, Streams zur Binärausgabe. Die Autoren kümmern sich um Zeichensätze. Streams tun dies nicht, weil davon ausgegangen wird, dass Sie diese Art der Konvertierung nicht möchten, die Ihre Binärdaten durcheinander bringen würde, und in diesem Fall einen Writer verwenden würden.
quelle
Sie können Rohbytes in einen Stream und nicht in einen Writer schreiben. Das PrintWriter-Javadoc listet die anderen Unterschiede auf (vor allem, wenn Sie eine Codierung für einen Stream festlegen können, damit die von mir angegebenen Rohbytes interpretiert werden können).
quelle
aus Core Java von Horstmann
quelle
Printwriter ist eine Erweiterung von Printstream.
IE printstream für einen bestimmten Zweck.
quelle