我正在尝试从以下代码块中的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类中的任何代码?提前谢谢。
答案 0 :(得分:8)
简单地说:你做不到。 PrintStream用于输出,要读取数据,您需要一个InputStream(或任何子类)。
您已拥有ByteArrayOutputStream。最容易做的是:
// ...
ByteArrayOutputStream baos = new ByteArrayOutputStream();
out = new PrintStream(baos);
// ...
ByteArrayInputStream in = new ByteArrayInputStream(baos.toByteArray());
// use in to read the data
答案 1 :(得分:0)
如果保留对基础字节数组输出流的引用,则可以在其上调用toString(String encoding)或toByteArray()。
我怀疑你想要前者,你需要指定编码以匹配字符串的写入方式(你可以使用默认的编码变体)
答案 2 :(得分:0)
由于您无法更改控制器,请启动控制器的过程并从过程的输出中读取。