为什么部分IO流在调用Close()方法之前要先调用flush()方法

1 篇文章 0 订阅

很多人可能一直比较纠结为什么有的带有缓冲功能的流在CLose()方法之前要先调用flush()方法 , 

我们先大概说一下带缓冲功能的流的原理   :   如果是需要频繁的对文件进行读或写  ,   普通流的速度会比较慢  ,   而缓冲流是在普通流的基础上多了一个缓冲区  ,   当读或写的数据达到一定量   ,    再自动往文件里进行读写  ,   如果没有装满缓冲区文件就已经读(写)完毕 ,   那么这个时候已经读写到缓冲区的数据需要手动使其朝目标文件进行读写.


这个手动的过程  ,  就是我们这里提到的flush()方法  .   


换句话说  ,  如果是文件读写完的同时缓冲区刚好装满  ,   那么缓冲区会把里面的数据朝目标文件自动进行读或写  ,   这种时候你直接调用close()方法不会出现问题  ;   但是如果文件在读写完成时   ,   缓冲区没有装满 ,  就直接调用close()方法   ,    这个时候装在缓冲区的数据就不会自动的朝目标文件进行读或写   ,  从而造成缓冲区中的这部分数据丢失  ,  所以这个是时候就需要在close()之前先调用flush()方法   ,   手动使缓冲区数据读写到目标文件.     举个例子:    如果一个文件大小是20kb  ,   我们的缓冲区大小是15kb  ,    如果Close()方法之前没有先调用flush()方法  ,   那么这个时候剩余的5kb数据就会丢失  . 

  • 12
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值