1

这里来自java文档:

打印作家

公共 PrintWriter(Writer out, boolean autoFlush)

Creates a new PrintWriter.

Parameters:
    out - A character-output stream
    autoFlush - A boolean; if true, the println, printf, or format methods will flush the output buffer

我想知道PrintWriter用这个构造函数创建一个是否真的包装了OutputStream将被缓冲。

这是我在这个网站上找到的源代码(grepcode),在这里我报告了有问题的类构造函数:

创建一个新的 PrintWriter。

参数: out 字符输出流 autoFlush 布尔值;如果为 true,println、printf 或 format 方法将刷新输出缓冲区。

  public  [More ...] PrintWriter(Writer out,boolean autoFlush) {
      super(out);
      this.out = out;
      this.autoFlush = autoFlush;
      lineSeparator = java.security.AccessController.doPrivileged(
      new sun.security.action.GetPropertyAction("line.separator"));    }

从现有的 OutputStream 创建一个新的 PrintWriter,而不自动刷新行。这个方便的构造函数创建了必要的中间 OutputStreamWriter,它将使用默认字符编码将字符转换为字节。

参数:out 输出流 参见:java.io.OutputStreamWriter.OutputStreamWriter.(java.io.OutputStream) public [更多...] PrintWriter(OutputStream out) { this(out, false); }

请注意,super(out)它仅用于同步目的。(此处的源代码)没有使用 a 的参考,BufferedWriter因为对于该类的所有其他构造函数PrintWriter

这个问题中,我被告知这个构造函数似乎没有使用缓冲区,但是在使用它时它显然使用了一个缓冲区(即,没有true在第二个参数中指定它不会刷新并且刷新仅适用于缓冲区。

此外,我见过这样写的代码

 PrintWriter writer = new PrintWriter(
                         new BufferedWriter (
                             new FileWriter("somFile.txt")));

PrintWriter writer = new PrintWriter(new FileWriter("someFiles.txt",true));可以在不将其包装FileWriter在缓冲区中的情况下替换它。

底线我想知道是否new PrintWriter(writer w, true);像所有其他构造函数一样自动包装在缓冲区中。如果是这样,您能否指出它发生的源代码位?

4

0 回答 0