在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
- 刷新该流的缓冲。
-
- 抛出:
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("\r\n"); 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("\r\n"); 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()后,会在每次执行到此处的时候都会把缓存中的数据写入到文件中,并清空缓存。
但是需要注意的是,如果加上这句,每次循环都会执行一次,同样的会增加用时。所以时间和占用缓存这个需要做比较了
时间: 2024-11-06 03:55:32