Вопрос

Я пытаюсь прочитать (добавить входящие данные в локальную строку) из PrintStram в следующем блоке кода:

    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 будет записывать некоторые строки в свой вывод (PrintStream), тогда как я могу читать из этого PrintStream, предполагая, что я не могу изменить какой-либо код в классе Controller? Заранее спасибо.

Это было полезно?

Решение

Проще говоря, вы не можете. PrintStream предназначен для вывода , для чтения данных вам необходим InputStream (или любой подкласс).

У вас уже есть ByteArrayOutputStream. Проще всего это сделать:

// ...

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

// ...

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

// use in to read the data

Другие советы

Если вы сохраняете ссылку на базовый поток вывода байтового массива, вы можете вызвать toString (String encoding) или toByteArray () .

Я подозреваю, что вы хотите использовать первое, и вам нужно указать кодировку, совпадающую с тем, как были записаны строки (возможно, вам удастся избежать использования варианта кодировки по умолчанию)

Поскольку вы не можете изменить контроллер, запустите процесс для контроллера и прочитайте его результаты.

Пример .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top