io中需要flush()刷新的流

只有输出流才需要flush()刷新,输入流都没有flush()方法

  1. 为什么没有输入流,因为所有输入流都没flush()方法。
    flush()方法是定义在OutputStream和Writer这两个输出流的超类里面的方法,这是因为flush方法的作用和功能是向外做输出,将内存中的数据提交输出到外部文件当中,在BufferedWriter中,因为是对外做写操作,因此是有提交输出的flush方法的;而在BufferedReader对象中,因为它的作用是用来从外部读取文件内容到内存中,因此不存在向外做提交输出的操作,因此没有flush方法。

所以以下的流均包含了flush()方法:
FileOutputStream, 字节流输出流
FileWriter, 字符输出流
BufferedOutputStream, 缓冲字节输出流
BufferedWriter, 缓冲字符输出流
OutputStreamWriter, 转换输出流
ObjectOutputStream 序列化输出流

只有字节流输出流FileOutputStream和序列化输出流ObjectOutputStream不需要flush()就能直接写入文件
FileWriter字符输出流,BufferedOutputStream缓冲字节输出流,BufferedWriter缓冲字符输出流,OutputStreamWriter转换输出流都需要刷新flush方法才能写到文件上。

所以总结一下:如果是和Writer相关(内置缓冲区)或者是内置了缓冲数组的流都需要flush()这个过程才能写入文件

但是为了保险起见:以后只要涉及相关输出流,不论是字节流还是字符流,只要是OutputStream和Writer相关的,都加上flush()保险,
当然如果是直接close()就不用flush()了,但是保不齐以后增加代码会对数据进行操作,这个时候就容易出问题了

posted @ 2022-04-20 09:50  一只带不动的小菜鸡  阅读(1205)  评论(0编辑  收藏  举报