这里来自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);
像所有其他构造函数一样自动包装在缓冲区中。如果是这样,您能否指出它发生的源代码位?