StringBuffer中的flush()方法作用

在java API1.6对flush()方法的介绍如下:

方法摘要
 void close()
          关闭此流,但要先刷新它。
 void flush()
          刷新该流的缓冲。
 void newLine()
          写入一个行分隔符。
 void write(char[] cbuf, int off, int len)
          写入字符数组的某一部分。
 void write(int c)
          写入单个字符。
 void write(String s, int off, int len)
          写入字符串的某一部分。

 flush

public void flush()
           throws IOException
刷新该流的缓冲。  
指定者:
接口 Flushable 中的 flush
指定者:
Writer 中的 flush
抛出:
IOException - 如果发生 I/O 错误

以上是API中介绍的,通过我的测试发现其具体的用处如下:

  观察如下代码:

    

 1 package mosTest;
 2 
 3 import java.io.BufferedWriter;
 4 import java.io.File;
 5 import java.io.FileWriter;
 6 import java.io.IOException;
 7 import java.text.SimpleDateFormat;
 8 import java.util.ArrayList;
 9 import java.util.Date;
10 import java.util.List;
11 
12 
13 
14 public class lis {
15 
16     public static void main(String[] args) throws IOException {
17         File file1 = new File("D:\io\out.txt");
18         BufferedWriter bw = new BufferedWriter(new FileWriter(file1));
19         StringBuilder buffer = new StringBuilder("S|1|S0180||||");
20         buffer.append("
");
21         List subList = new ArrayList();
22         List listid = new ArrayList();
23         long s= System.currentTimeMillis();
24         for (int i = 0; i < 60; i++) {
25             for(int k=0; k<5000; k++){
26                 buffer.append("KKKKKKKKKKKKKKKKKKKKKKKKKK"+k);
27                 buffer.append("
");
28             }
29             bw.write(buffer.toString());
30             //bw.flush();
31             buffer = new StringBuilder();
32         }
33         bw.close();
34     }
35 }

该代码是每次写入文件5000长度的buffer,总共写入60次。
如果没有加上第30行注释的bw.flush().在第29行执行的程序,写入的数据并不是写入到文件中而是写入到内存中,此时当

StringBuffer超过内存限制的时候,会把缓存中的数据才会写入到文件中,相当于超过限制的执行了一次bw.flush();

而加上bw.flush()后,会在每次执行到此处的时候都会把缓存中的数据写入到文件中,并清空缓存。

但是需要注意的是,如果加上这句,每次循环都会执行一次,同样的会增加用时。所以时间和占用缓存这个需要做比较了

原文地址:https://www.cnblogs.com/xiayahui/p/4577284.html