有没有办法将stdout重定向到内存中的数据结构,以便以后可以在没有硬盘驱动器操作的情况下读取它?
实际上,我希望ClassLoader运行两个程序,然后捕获并比较它们的输出.我必须运行大量的测试用例,所以我不想将输出重定向到临时文件,因为硬盘真的很慢.
您可以在程序开始时执行以下操作:
final ByteArrayOutputStream out = new ByteArrayOutputStream();
final PrintStream stream = new PrintStream(out);
System.setOut(stream);
Run Code Online (Sandbox Code Playgroud)
但是,要注意这种流的不受控制的增长,如果你不小心,你可能会使你的记忆饱和.请注意,这将照顾标准输出,但不是 stderr(为此你也需要它.setErr().
另见javadoc forByteArrayOutputStream.
最后说明:你为什么要这样做?