2

基本上我想知道 PrintWriter 是否是缓冲作家。我从这个 javadocPrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));中看到了类似 但是的代码:

参数: file - 用作此 writer 目标的文件。如果文件存在,那么它将被截断为零大小;否则,将创建一个新文件。输出将被写入文件并被缓冲。

底线:我认为 PrintWriter 是缓冲的,因为 javadoc “提到它”(见引用),如果我不刷新 PrintWriter 它不会被打印。你确认我的论文吗?在那种情况下,为什么会有一些代码类似于: PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); 遗留代码?

提前致谢。

4

1 回答 1

2

从技术上讲,它不是BufferedWriter. 它直接扩展Writer。也就是说,它似乎可以使用 aBufferedWriter取决于您调用的构造函数。例如,查看传入 a 的构造函数String

public PrintWriter(String fileName) throws FileNotFoundException {
    this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName))),
         false);
}

此外,您没有使用已链接到的 javadoc 的构造函数。您已经使用了带有Writer. 那个人似乎没有使用BufferedWriter. 这是它的源代码:

/**
 * Creates a new PrintWriter, without automatic line flushing.
 *
 * @param  out        A character-output stream
 */
public PrintWriter (Writer out) {
    this(out, false);
}

/**
 * Creates a new PrintWriter.
 *
 * @param  out        A character-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
 */
public 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"));
}
于 2013-06-20T20:35:52.747 回答