Esto puede sonar frívolo, pero se PrintStream
imprime en una OutputStream
, y se PrintWriter
imprime en una Writer
. 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 a Writer
? Ambos son flujos, con la diferencia principal de que OutputStream
es un flujo de bytes mientras que a Writer
es un flujo de caracteres.
Si se OutputStream
trata de bytes, ¿qué pasa PrintStream.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 desuso PrintStream
si solo fuera por el hecho de que es tan ampliamente utilizado. (¡Después de todo, no querrá que cada llamada System.out
genere una advertencia de API obsoleta! Además, cambiar el tipo de PrintStream
a PrintWriter
las secuencias de salida estándar habría roto las aplicaciones existentes).