gpt4 book ai didi

java - 隐藏 Java 输出

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:43:20 24 4
gpt4 key购买 nike

我正在使用外部库。当调用这个库的方法时,它会在控制台上输出一些文本。我想从控制台隐藏此文本。怎么可能?

提前致谢

最佳答案

您可以重新定义 system.out(我相信它是 System.setOut())我相信您可以将它设置为 NULL(更正——您不能将它设置为 NULL),但您可以将它设置为任何输出流.

我曾经用这个做过一些有趣的事情。我保存了“System.out”,然后使用“print”方法中的代码将其重定向到我自己的输出流——只要有人打印到流中,就会调用该方法。

每次一行输入进入这个类时,我都会创建一个堆栈跟踪,获取跟踪并深入挖掘调用 System.out.println() 方法的方法。此时,我可以在行前加上即时记录器功能——它甚至可以显示行号。

这可能很慢,但可以很容易地打开和关闭。

我还可以在不接触源代码的情况下完成您想要的所有过滤。有时我会过滤单个包,有时我会过滤一个类,有时会过滤以“BK:”开头的字符串,这只会打印出我的消息。

总的来说,为生产删除所有调试输出非常有趣且微不足道。

(我不建议为生产代码使用获取堆栈跟踪的东西,它真的应该很慢,即使我没有注意到它)

// class variable
public static final OutputStream out;

{
out=System.getOutputStream();// I may have the actual name wrong, but it's close
System.setOutputStream(new OutputStreamThatDoesNothing());
}

此时任何调用:

Redirect.out("Hello");

应该像调用 System.out 那样工作。

因为这没有魔法,如果你真的想,你也可以这样做:

OutputStream tmp=System.getOutputStream();
System.setOutpuatStream(nullStream);
callOffensiveLibraryMethod();
System.setOutputStream(tmp);

这只会消除该调用中的输出,但如果您的应用程序是多线程的,那将是非常糟糕的。

关于java - 隐藏 Java 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3894798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com