Pregunta

Estoy intentando leer (agregar datos entrantes a una cadena local) de un PrintStram en el siguiente bloque de código:

    System.out.println("Starting Login Test Cases...");

    out = new PrintStream(new ByteArrayOutputStream());
            command_feeder = new PipedWriter();
            PipedReader in = new PipedReader(command_feeder);

    main_controller = new Controller(in, out);

    for(int i = 0; i < cases.length; i++)
    {
                command_feeder.write(cases[i]);
    }

main_controller escribirá algunas cadenas a su salida (PrintStream), entonces, ¿cómo puedo leer desde este PrintStream asumiendo que no puedo cambiar ningún código en la clase de Controlador? Gracias de antemano.

¿Fue útil?

Solución

Simplemente hablado: no puedes. Un PrintStream es para generar , para leer datos, necesita un InputStream (o cualquier subclase).

Ya tienes un ByteArrayOutputStream. Lo más fácil de hacer es:

// ...

ByteArrayOutputStream baos = new ByteArrayOutputStream();
out = new PrintStream(baos);

// ...

ByteArrayInputStream in = new ByteArrayInputStream(baos.toByteArray());

// use in to read the data

Otros consejos

Si mantiene una referencia al flujo de salida de la matriz de bytes subyacente, puede llamar a toString (String encoding) , o toByteArray () .

Sospecho que desea el primero, y necesita especificar la codificación para que coincida con la forma en que se escribieron las cadenas (es posible que pueda utilizar la variante de codificación predeterminada)

Como no puede cambiar el controlador, inicie un proceso para el controlador y lea la salida del proceso.

Ejemplo .

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