Java: Como faço para ler a partir PrintStream?
Pergunta
Eu estou tentando ler (dados de acréscimo de entrada em uma seqüência local) a partir de um PrintStram no bloco de código a seguir:
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 estará escrevendo algumas cordas para o seu fora (PrintStream), então como eu posso ler a partir deste PrintStream supondo que eu não posso mudar qualquer código na classe Controller? Agradecemos antecipadamente.
Solução
Simplesmente falei: você não pode. A PrintStream é para outputting , para ler dados, você precisa de um InputStream (ou qualquer subclasse).
Você já tem um ByteArrayOutputStream. Mais fácil de fazer é:
// ...
ByteArrayOutputStream baos = new ByteArrayOutputStream();
out = new PrintStream(baos);
// ...
ByteArrayInputStream in = new ByteArrayInputStream(baos.toByteArray());
// use in to read the data
Outras dicas
Se você manter uma referência para o fluxo de saída matriz de bytes subjacente, você pode chamar toString (codificação string) nele, ou ToByteArray () .
Eu suspeito que você deseja que o primeiro, e você precisa especificar a codificação para coincidir com a forma como as cordas de ter sido escrito em (você pode ser capaz de fugir com usando a variante de codificação padrão)
Desde que você não pode mudar o controlador, iniciar um processo para o controlador e ler a partir de saída do processo.
Exemplo .