如何将标准输出重定向到Java中的内存中结构?

0 java output

有没有办法将stdout重定向到内存中的数据结构,以便以后可以在没有硬盘驱动器操作的情况下读取它?

实际上,我希望ClassLoader运行两个程序,然后捕获并比较它们的输出.我必须运行大量的测试用例,所以我不想将输出重定向到临时文件,因为硬盘真的很慢.

fge*_*fge 9

您可以在程序开始时执行以下操作:

final ByteArrayOutputStream out = new ByteArrayOutputStream();
final PrintStream stream = new PrintStream(out);
System.setOut(stream);
Run Code Online (Sandbox Code Playgroud)

但是,要注意这种流的不受控制的增长,如果你不小心,你可能会使你的记忆饱和.请注意,这将照顾标准输出,但不是 stderr(为此你也需要它.setErr().

另见javadoc forByteArrayOutputStream.


最后说明:你为什么要这样做?