manejo - extraer una parte de una cadena en java
Escribir una cadena en la secuencia de salida (6)
Envuelva su OutputStream con un PrintWriter y use los métodos de impresión en esa clase. Toman una Cadena y hacen el trabajo por ti.
Tengo varios oyentes de salida que están implementando OutputStream. Puede ser una escritura de PrintStream a stdout o a un archivo, o puede estar escribiendo en la memoria o en cualquier otro destino de salida; por lo tanto, especifiqué OutputStream como (un) argumento en el método.
Ahora, he recibido el String. ¿Cuál es la mejor manera de escribir en transmisiones aquí?
¿Debo simplemente usar Writer.write (message.getBytes ())? Puedo darle bytes, pero si la secuencia de destino es una secuencia de caracteres, ¿se convertirá automáticamente?
¿Debo usar algunas transmisiones puente aquí?
OutputStream escribe bytes, String proporciona caracteres. Necesita definir Charset para codificar cadena a byte []:
outputStream.write(string.getBytes(Charset.forName("UTF-8")));
Cambie UTF-8
a un conjunto de caracteres de su elección.
Puede crear un ajuste de PrintStream alrededor de su OutputStream y luego simplemente llamarlo imprimir (String):
final OutputStream os = new FileOutputStream("/tmp/out");
final PrintStream printStream = new PrintStream(os);
printStream.print("String");
printStream.close();
Puede usar Apache Commons IO :
try (OutputStream outputStream = ...) {
IOUtils.write("data", outputStream, "UTF-8");
}
Por diseño , debe hacerse de esta manera:
OutputStream out = ...;
try (Writer w = new OutputStreamWriter(out, "UTF-8")) {
w.write("Hello, World!");
} // or w.close(); //close will auto-flush
Los flujos ( 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)
, pero debe evitar el método String.getBytes()
, ya que utiliza la codificación predeterminada de la JVM, que no se puede predecir de forma fiable. una 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 un PrintWriter
), que realiza la conversión cuando llama a su método write(String)
(o print(String)
) . El contenedor correspondiente para InputStreams es un Reader .
PrintStream
es una implementación especial de OutputStream
en el sentido de que también contiene métodos que codifican cadenas automáticamente (utiliza un escritor internamente). Pero sigue siendo un flujo. Puede ajustar con seguridad su transmisión con un escritor, sin importar si se trata de un PrintStream
u otra implementación de 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();
}