gpt4 book ai didi

java - PrintWriter 是否缓冲?

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

我知道PrintWriter如果我们要写入格式化的数据是非常好的,我也知道使用BufferedWriter来提高IO性能。

但是我试过这样的,

PrintWriter pw = new PrintWriter(System.out);
pw.println("Statement 1");
pw.println("Statement 2");
//pw.flush();

我观察到当 flush 方法被注释时没有输出,但是当我取消注释时,我得到了想要的输出。

这只有在 PrintWriter 被缓冲时才有可能。如果是这样,那么使用 BufferedWriter 包装 PrintWriter 然后写入它的意义何在?

虽然 javadoc 没有在任何地方提到 PrintWriter 是缓冲的,但看起来是这样。

最佳答案

我检查了从 1.6.0_45 开始的 JDK 版本,它们都有 this构造函数存在:

/**
* Creates a new PrintWriter from an existing OutputStream. This
* convenience constructor creates the necessary intermediate
* OutputStreamWriter, which will convert characters into bytes using the
* default character encoding.
*
* @param out An output stream
* @param autoFlush A boolean; if true, the <tt>println</tt>,
* <tt>printf</tt>, or <tt>format</tt> methods will
* flush the output buffer
*
* @see java.io.OutputStreamWriter#OutputStreamWriter(java.io.OutputStream)
*/
public PrintWriter(OutputStream out, boolean autoFlush) {
this(new BufferedWriter(new OutputStreamWriter(out)), autoFlush);

因此 PrintWritter 使用缓冲输出。如果您想使用您指出的代码,您可以创建 PrintWriter 并将 autoflush 设置为 true,这将确保使用 println 之一, printfformat方法将刷新流。因此,您的代码在给定的上下文中看起来像这样:

PrintWriter pw = new PrintWriter(System.out, true);
pw.println("Statement 1");
pw.println("Statement 2");

关于java - PrintWriter 是否缓冲?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32177690/

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