¿Cuál es la diferencia entre PrintStream
y PrintWriter
? Tienen muchos métodos en común debido a que a menudo mezclo estas dos clases. Además, creo que podemos usarlos para exactamente las mismas cosas. Pero tiene que haber una diferencia, de lo contrario, habría habido solo una clase.
He buscado en los archivos, pero no pude encontrar esta pregunta.
java
io
printwriter
printstream
Martijn Courteaux
fuente
fuente
Respuestas:
Esto puede sonar frívolo, pero se
PrintStream
imprime en unaOutputStream
, y sePrintWriter
imprime en unaWriter
. Ok, dudo que obtenga algún punto por decir lo obvio. Pero hay más.Entonces, ¿cuál es la diferencia entre an
OutputStream
y aWriter
? Ambos son flujos, con la diferencia principal de queOutputStream
es un flujo de bytes mientras que aWriter
es un flujo de caracteres.Si se
OutputStream
trata de bytes, ¿qué pasaPrintStream.print(String)
? Convierte caracteres en bytes utilizando la codificación de plataforma predeterminada. El uso de la codificación predeterminada generalmente es algo malo, ya que puede generar errores al moverse de una plataforma a otra, especialmente si está generando el archivo en una plataforma y consumiéndolo en otra.Con un
Writer
, normalmente especificas la codificación a usar, evitando las dependencias de la plataforma.¿Por qué molestarse en tener un
PrintStream
JDK, ya que la intención principal es escribir caracteres y no bytes?PrintStream
es anterior a JDK 1.1 cuando se introdujeron secuencias de caracteres de Reader / Writer. Me imagino que Sun habría quedado en desusoPrintStream
si solo fuera por el hecho de que es tan ampliamente utilizado. (¡Después de todo, no querrá que cada llamadaSystem.out
genere una advertencia de API obsoleta! Además, cambiar el tipo dePrintStream
aPrintWriter
las secuencias de salida estándar habría roto las aplicaciones existentes).fuente
PrintStream
no se ha limitado al uso de la codificación predeterminada de la plataforma; Hay constructores que aceptan un nombre de juego de caracteres. Así, las distinciones entrePrintStream
yPrintWriter
son que aPrintWriter
no puede escribir bytes sin procesar y las dos clases envuelven diferentes tipos de destinos.PrintStream
losprint()
métodos de una interfaz que son funciones de conveniencia que llamanwrite()
, por lo que desencadenan el enjuague automático si está habilitado.PrintWriter
por otro lado, no se eliminará automáticamente después de una llamada aprint()
. He estado demostrando algunos Java para principiantes hoy y esto estaba atrapando a algunos estudiantes que no estaban familiarizados con la necesidad de descargar manualmente. De lo contrario, su respuesta es excelente.Con el
PrintStream
está atascado en la codificación predeterminada de la plataforma.Sin
PrintWriter
embargo, con el puede pasar unOutputStreamWriter
con una codificación específica.La ventaja es, bueno, que puede controlar la codificación de caracteres, los caracteres deben escribirse de tal manera que finalmente no terminen como mojibake .
fuente
PrintStream(OutputStream out, boolean autoFlush, String encoding)
Desde JDK 1.4 es posible especificar la codificación de caracteres para un PrintStream. Por lo tanto, las diferencias entre PrintStream e PrintWriter solo se refieren al comportamiento de enjuague automático y que un PrintStream no puede ajustar un escritor.
fuente
Los escritores como PrintWriter son para salida de texto, las secuencias son para salida binaria. Los escritores manejan las cosas del juego de caracteres para ti. Las transmisiones no lo hacen porque se supone que no desea ese tipo de conversión, lo que estropearía sus datos binarios y utilizaría un escritor si lo hiciera.
fuente
Puede escribir bytes sin formato en una secuencia y no en un escritor. Los PrintStream listas javadoc las otras diferencias (que es más importante, ser capaz de establecer una codificación en una corriente para que pueda interpretar los bytes sin diría yo).
fuente
del núcleo de Java por Horstmann
fuente
Printwriter es una mejora del flujo de impresión.
IE printstream para un propósito específico.
fuente