Pregunta

¿Cuál es la diferencia entre PrintStream y PrintWriter? Tienen muchos métodos en común debido a que a menudo mezclar estas dos clases de arriba. Por otra parte, creo que podemos usarlos para exactamente las mismas cosas. Pero tiene que haber una diferencia, de lo contrario, no habría habido una sola clase.

He buscado en los archivos, pero no pudo encontrar a esta pregunta.

¿Fue útil?

Solución

Esto puede sonar frívolo, pero no se imprime PrintStream a un OutputStream, e imprime a una PrintWriter Writer. Ok, dudo que reciben puntos por decir lo obvio. Pero hay más.

Así que, ¿cuál es la diferencia entre un OutputStream y una Writer? Ambos son corrientes, con la diferencia principal de un OutputStream es un flujo de bytes mientras que un Writer es una cadena de caracteres.

Si un OutputStream trata de bytes, lo que acerca PrintStream.print(String)? Convierte caracteres a bytes utilizando la codificación plataforma predeterminada. El uso de la codificación predeterminada es generalmente una mala cosa, ya que puede conducir a errores al pasar de una plataforma a otra, sobre todo si va a generar el archivo en una plataforma y consumirlo en otro.

Con una Writer, normalmente se especifica la codificación para su uso, evitando cualquier dependencia de la plataforma.

¿Por qué se molestó tener un PrintStream en el JDK, ya que la intención principal es escribir caracteres y no bytes? predates PrintStream JDK 1.1, cuando se introdujeron las corrientes de carácter lector / grabador. Me imagino Sun tendría PrintStream obsoleta aunque sólo sea por el hecho de que se utiliza tan ampliamente. (Después de todo, usted no quiere que cada llamada a System.out para generar una advertencia API en desuso! Además, cambiar el tipo de PrintStream a PrintWriter sobre los flujos de salida estándar habría roto las aplicaciones existentes.)

Otros consejos

Con la PrintStream eres pegado a la codificación por defecto de la plataforma.

PrintStream stream = new PrintStream(output);

Con la PrintWriter Sin embargo, puede pasar una OutputStreamWriter con una codificación específica.

PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"));

La ventaja es, así, que se puede controlar la codificación de caracteres de los caracteres debe ser escrito en tales que no van a terminar como el tiempo mojibake .

Desde el JDK 1.4 es posible especificar la codificación de caracteres para un PrintStream. Por lo tanto, las diferencias entre PrintStream y PrintStream sólo sobre el comportamiento de lavado de automóviles y que una PrintStream no puede envolver un escritor.

Escritores como PrintStream son para la salida de texto, flujos son para la salida binaria. Los escritores manejan cosas de conjunto de caracteres para usted. Corrientes no lo hacen porque se asume que no desea ese tipo de conversión, que podría estropear sus datos binarios, y estaría utilizando un escritor si lo hizo.

Puede escribir bytes sin formato a una corriente y no a un escritor. Los PrintStream listas javadoc el otro 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).

de núcleo java por Horstmann

  

Java veteranos podría preguntarse qué pasó con la clase PrintStream y en System.out. en Java   1.0, la clase PrintStream simplemente trunca todos los caracteres Unicode para caracteres ASCII por goteo   el byte superior. (En el momento, Unicode todavía era un 16-bit de codificación.) Claramente, que no era un limpia o   enfoque portátil, y lo arreglaron con la introducción de los lectores y escritores en Java 1.1. por   compatibilidad con el código existente, System.in, System.out, y System.err son todavía de entrada / salida   corrientes, y no lectores y escritores. Pero ahora la clase PrintStream convierte internamente Unicode   caracteres al host por defecto la codificación de la misma forma en que el PrintStream hace. Objetos de tipo   PrintStream actúan exactamente igual que los escritores de impresión cuando utiliza los métodos de impresión y println, pero a diferencia de   imprimir escritores que le permiten a la salida de bytes sin formato con la escritura (int) y los métodos de escritura (byte []).

PrintWriter es una mejora de PrintStream.

I.E. PrintStream para un propósito específico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top