Java: come posso leggere da PrintStream?
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.
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 .