gpt4 book ai didi

Java:同步标准输出和标准错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:13:34 25 4
gpt4 key购买 nike

我有一个奇怪的问题,如果我能解决它就好了。出于调试目的(以及其他一些目的),我正在标准输出上编写控制台 Java 应用程序的日志。有些东西写在标准输出上,有些东西比如错误打印在标准错误上。问题在于这两者并不完全同步,因此打印行的顺序并不总是正确的。我想这是因为打印了很多东西,并且碰巧一个输出的缓冲区已满,所以另一个输出在第一个输出刷新缓冲区之前打印。

例如,我想这样写:

syso: aaa
syso: bbb
syso: ccc
syso: ddd
syso: eee
syserr: ---

有时打印的是

aaa
bbb
ccc
---
ddd
eee

有时候中间没有换行,所以看起来像

aaa
bbb
ccc---

ddd
eee

每次我在输出上打印一些东西时,我用 flush 相同的输出

System.out.flush();

System.err.flush();

如何解决这个问题?顺便说一句,所有内容都打印在 Eclipse 控制台中。

最佳答案

问题在于终端仿真器(在您的情况下为 Eclipse)负责处理应用程序的标准输出和标准错误。如果不与终端仿真器通信,您永远无法确定 outerr 以正确的顺序显示。因此,我会考虑在 err 上打印所有内容并将其重定向到一个文件。您仍然可以使用 out 进行干净的用户交互。

不过,对于您的问题有一个(非常糟糕但严格的)解决方案:

System.out.println(...);
System.out.flush();
Thread.sleep(100);

System.err.println(...);
System.err.flush();
Thread.sleep(100);

您可能需要根据您的配置更改 sleep 持续时间!

关于Java:同步标准输出和标准错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6121786/

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