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.

Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top