Domanda

Sto cercando di leggere (accodare i dati in arrivo in una stringa locale) da uno PrintStram nel seguente blocco di codice:

    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 scriverà alcune stringhe al suo esterno (PrintStream), quindi come posso leggere da questo PrintStream supponendo che non sia possibile modificare alcun codice nella classe Controller? Grazie in anticipo.

È stato utile?

Soluzione

Semplicemente parlato: non puoi. Un PrintStream è per in uscita , per leggere i dati è necessario un InputStream (o qualsiasi sottoclasse).

Hai già un ByteArrayOutputStream. Il più semplice da fare è:

// ...

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

// ...

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

// use in to read the data

Altri suggerimenti

Se si mantiene un riferimento al flusso di output dell'array di byte sottostante, è possibile chiamare toString (codifica stringa) su di esso o toByteArray () .

Sospetto che tu voglia il primo e devi specificare la codifica in modo che corrisponda al modo in cui sono state scritte le stringhe (potresti riuscire a cavartela usando la variante di codifica predefinita)

Poiché non è possibile modificare il controller, avviare un processo per il controller e leggere dall'output del processo.

Esempio .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top