2009-07-30 64 views
0

我想读从PrintStram在下面的代码块(输入数据追加到本地字符串):Java:我如何从PrintStream中读取数据?

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类中更改任何代码?提前致谢。

+0

如果你只是想知道控制器正在做什么,然后用'新控制器(在,System.out)'创建它,它将写入控制台(标准输出) – 2009-07-30 16:21:51

回答

8

简单地说:你不能。一个PrintStream是为输出,要读取数据,你需要一个InputStream(或任何子类)。

您已经有了一个ByteArrayOutputStream。最容易做的事情是:

// ... 

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

// ... 

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

// use in to read the data 
0

如果您保留对底层字节数组输出流的引用,则可以对其调用toString(String encoding)toByteArray()

我怀疑你想要前者,你需要指定编码匹配如何琴弦已被写入(你可以逃脱使用默认的编码变体)

0

由于您无法更改控制器,请为控制器启动进程并从进程的输出中读取。

Example

+0

嘿,你不会碰巧有任何工作链接到这个例子了,是吗? – DragonGamer 2017-09-25 18:36:28