Las secuencias ( InputStream
y OutputStream
) transfieren datos binarios . Si desea escribir una cadena en una secuencia, primero debe convertirla a bytes o, en otras palabras, codificarla . Puede hacerlo manualmente (como sugiere) utilizando el String.getBytes(Charset)
método, pero debe evitarlo String.getBytes()
, ya que utiliza la codificación predeterminada de la JVM, que no puede predecirse de manera confiable de forma portátil.
Sin embargo, la forma habitual de escribir datos de caracteres en una secuencia es envolver la secuencia en un Writer
, (a menudo a PrintWriter
), que realiza la conversión por usted cuando llama a su método write(String)
(o print(String)
). El contenedor correspondiente para InputStreams es un lector .
PrintStream
es una OutputStream
implementación especial en el sentido de que también contiene métodos que codifican cadenas automáticamente (usa un escritor internamente). Pero sigue siendo una corriente. Puede envolver su transmisión de forma segura con un escritor, sin importar si se trata de una PrintStream
implementación de alguna otra transmisión. No hay peligro de doble codificación.
Ejemplo de PrintWriter con OutputStream:
try (PrintWriter p = new PrintWriter(new FileOutputStream("output-text.txt", true))) {
p.println("Hello");
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}