Ari*_*Roy 6 java file-io bufferedwriter printwriter java-io
我知道PrintWriter如果我们想要编写格式化数据,那真的很好,而且我也知道使用它BufferedWriter来提高IO性能.
但我试过这样的事,
PrintWriter pw = new PrintWriter(System.out);
pw.println("Statement 1");
pw.println("Statement 2");
//pw.flush();
Run Code Online (Sandbox Code Playgroud)
我观察到当注释flush方法时没有输出,但是当我取消注释它时,我得到了所需的输出.
只有在PrintWriter被缓冲时才可以这样做.如果是这样,那么使用BufferedWriter包装PrintWriter然后编写它有什么意义呢?
虽然javadoc没有提到PrintWriter被缓冲的任何地方,但似乎如此.
来自PrintWriter的Java 8源代码
/**
* 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);
Run Code Online (Sandbox Code Playgroud)
您可以看到PrintWriter使用BufferedWriter,并且它有一个选项autoFlush,只有在缓冲时才有意义.
我检查了从1.6.0_45开始的JDK版本,所有这些版本都有这个构造函数:
/**
* 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);
Run Code Online (Sandbox Code Playgroud)
因此PrintWritter使用缓冲输出.如果您想使用您指出的代码,可以创建Printofriter并将autoflush设置为true,这将确保使用println,printf或format方法之一刷新流.因此,您的代码在给定的上下文中看起来像这样:
PrintWriter pw = new PrintWriter(System.out, true);
pw.println("Statement 1");
pw.println("Statement 2");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4275 次 |
| 最近记录: |