¿Cuál es la diferencia entre PrintStreamy 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
PrintStreamimprime en unaOutputStream, y sePrintWriterimprime 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
OutputStreamy aWriter? Ambos son flujos, con la diferencia principal de queOutputStreames un flujo de bytes mientras que aWriteres un flujo de caracteres.Si se
OutputStreamtrata 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
PrintStreamJDK, ya que la intención principal es escribir caracteres y no bytes?PrintStreames anterior a JDK 1.1 cuando se introdujeron secuencias de caracteres de Reader / Writer. Me imagino que Sun habría quedado en desusoPrintStreamsi solo fuera por el hecho de que es tan ampliamente utilizado. (¡Después de todo, no querrá que cada llamadaSystem.outgenere una advertencia de API obsoleta! Además, cambiar el tipo dePrintStreamaPrintWriterlas secuencias de salida estándar habría roto las aplicaciones existentes).fuente
PrintStreamno 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 entrePrintStreamyPrintWriterson que aPrintWriterno puede escribir bytes sin procesar y las dos clases envuelven diferentes tipos de destinos.PrintStreamlosprint()métodos de una interfaz que son funciones de conveniencia que llamanwrite(), por lo que desencadenan el enjuague automático si está habilitado.PrintWriterpor 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
PrintStreamestá atascado en la codificación predeterminada de la plataforma.Sin
PrintWriterembargo, con el puede pasar unOutputStreamWritercon 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