我正在尝试从以下代码块中的PrintStram读取(将传入数据附加到本地String中):

    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将为其out(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