Pregunta

Tengo una función que toma un objeto de un cierto tipo, y una PrintStream a la que imprimir, y da salida a una representación de ese objeto. ¿Cómo puedo capturar Me salida de esta función en una cadena? Específicamente, quiero utilizarlo como en un método toString.

¿Fue útil?

Solución

Utilizar un ByteArrayOutputStream como un amortiguador :

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;

    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try (PrintStream ps = new PrintStream(baos, true, "UTF-8")) {
        yourFunction(object, ps);
    }
    String data = new String(baos.toByteArray(), StandardCharsets.UTF_8);

Otros consejos

Puede construir un PrintStream con un ByteArrayOutputStream pasado al constructor que se puede utilizar más adelante para agarrar el texto escrito a la PrintStream.

ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
...
String output = os.toString("UTF8");

Una unificación de las respuestas anteriores, esta respuesta funciona con Java 1.7 y posteriores. Además, he añadido el código para cerrar las corrientes.

final Charset charset = StandardCharsets.UTF_8;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos, true, charset.name());
yourFunction(object, ps);
String content = new String(baos.toByteArray(), charset);
ps.close();
baos.close();

Tal vez esta pregunta podría ayudarle a: Obtener un OutputStream en una cadena

OutputStream Subclase y se envuelve en PrintStream

Definir e inicializar una variable llamada escáner INSS que crea un flujo de cadena de entrada utilizando la variable de cadena myStrLine.

Respuesta:     INSS escáner = new escáner (myStrLine);

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