很多人可能一直比较纠结为什么有的带有缓冲功能的流在CLose()方法之前要先调用flush()方法 ,
我们先大概说一下带缓冲功能的流的原理 : 如果是需要频繁的对文件进行读或写 , 普通流的速度会比较慢 , 而缓冲流是在普通流的基础上多了一个缓冲区 , 当读或写的数据达到一定量 , 再自动往文件里进行读写 , 如果没有装满缓冲区文件就已经读(写)完毕 , 那么这个时候已经读写到缓冲区的数据需要手动使其朝目标文件进行读写.
这个手动的过程 , 就是我们这里提到的flush()方法 .
换句话说 , 如果是文件读写完的同时缓冲区刚好装满 , 那么缓冲区会把里面的数据朝目标文件自动进行读或写 , 这种时候你直接调用close()方法不会出现问题 ; 但是如果文件在读写完成时 , 缓冲区没有装满 , 就直接调用close()方法 , 这个时候装在缓冲区的数据就不会自动的朝目标文件进行读或写 , 从而造成缓冲区中的这部分数据丢失 , 所以这个是时候就需要在close()之前先调用flush()方法 , 手动使缓冲区数据读写到目标文件. 举个例子: 如果一个文件大小是20kb , 我们的缓冲区大小是15kb , 如果Close()方法之前没有先调用flush()方法 , 那么这个时候剩余的5kb数据就会丢失 .