Java: PrintStream en cadena?
-
21-09-2019 - |
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
.
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);