zoukankan      html  css  js  c++  java
  • 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()后,会在每次执行到此处的时候都会把缓存中的数据写入到文件中,并清空缓存。

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

  • 相关阅读:
    vb开发最全教程
    javascript javascript面向对象的理解及简单的示例
    javascript jquery封装对象时的错误,求解!我想知道为什么
    c# sql省市联动
    javascript javascript加载类似星座、血型的函数
    c# winform使用IrisSkin2换肤弹不出窗口解决方案
    access + vb + asp 遇到一些问题的总结
    ffmpeg windows下编译ffmpeg
    wffmpeg64.dll调用 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
    非托管 调用非托管资源的使用
  • 原文地址:https://www.cnblogs.com/xiayahui/p/4577284.html
Copyright © 2011-2022 走看看