【发布时间】:2020-05-15 10:05:58
【问题描述】:
我像这样使用反射来打印出System.out 对象的属性:
System.out.println("Class: " + System.out.getClass().getName());
for (Field field : ObjectUtils.getAllFields(System.out)) {
field.setAccessible(true);
System.out.println("> " + field.getType().getSimpleName() + ' ' + field.getName() + " = " + field.get(System.out));
}
结果如下:
Class: java.io.PrintStream
> boolean autoFlush = false
> boolean trouble = false
> Formatter formatter = null
> BufferedWriter textOut = java.io.BufferedWriter@43c1b556
> OutputStreamWriter charOut = java.io.OutputStreamWriter@587e5365
> boolean closing = false
> OutputStream out = org.apache.tools.ant.util.TeeOutputStream@22fcf7ab
如您所见,autoflush 设置为 false。所以我的问题很简单——如何将System.out 配置为将autoflush 设置为true?
【问题讨论】:
-
你用的是什么jvm?我收到 autoFlush = true,这与 Java 8 和 Java 11 的 OpenJDK 源代码一致。对于 Java11 检查:github.com/AdoptOpenJDK/openjdk-jdk11/blob/master/src/java.base/… 和 github.com/AdoptOpenJDK/openjdk-jdk11/blob/master/src/java.base/…
标签: java flush printwriter system.out autoflush