Java:io流之输出流flush和close

这几天学习io流,刚开始没注意输出流的flush()和close()有什么区别。这里补充一下FileWriter。

flush和close

  • public void close()关闭此输出流并释放与此流相关联的任何系统资源。
  • public void flush() 刷新此输出流并强制任何缓冲的输出字节被写出。

可以看到,flush是刷新,close关闭并且释放资源。

区别
因为内置缓冲区的原因,如果不关闭输出流无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据的。如果我们既想写出数据,又想继续使用流,就需要flush 方法了。

  • flush刷新缓冲区,流对象可以继续使用
  • close :先刷新缓冲区,然后通知系统释放资源流对象不可以再被使用了。

flush

public class FWWrite {
    public static void main(String[] args) throws IOException {
        // 使用文件名称创建流对象
        FileWriter fw = new FileWriter("fw.txt");
        // 写出数据,通过flush
        fw.write('刷'); // 写出第1个字符,
        fw.flush();//直接到文件中了,而不是还在缓冲区中。
        fw.write('新'); // 继续写出第2个字符,写出成功
        fw.flush();//不关闭流对象,继续写出到文件。
      
      	// 写出数据,通过close
        fw.write('关'); // 写出第1个字符
        fw.close();
        fw.write('闭'); // 继续写出第2个字符,【报错】java.io.IOException: Stream closed
        fw.close();
    }
}

close

public class FWWrite {
    public static void main(String[] args) throws IOException {
        // 使用文件名称创建流对象
        FileWriter fw = new FileWriter("fw.txt");     
      	// 写出数据
      	fw.write(97); // 写出第1个字符
      	fw.write('b'); // 写出第2个字符
      	fw.write('C'); // 写出第3个字符
      	fw.write(30000); // 写出第4个字符,中文编码表中30000对应一个汉字。
      
      	/*
        【注意】关闭资源时,与FileOutputStream不同。
      	 如果不关闭,数据只是保存到缓冲区,并未保存到文件。
        */
         fw.close();//关闭之后才会写出到文件中
    }
}
输出结果:
abC田
  1. 虽然参数为int类型四个字节,但是只会保留一个字符的信息写出。
  2. 未调用close方法,数据只是保存到了缓冲区,并未写出到文件中;但FileOutputStream不关闭流也可以保存到文件中。

参考来自黑马,侵删

posted @ 2022-02-27 14:29  CodeWater  阅读(1061)  评论(0编辑  收藏  举报