黑马程序员技术交流社区

标题: 输出流中用write时,什么时候需要用flush刷新? [打印本页]

作者: fanshuai    时间: 2015-2-20 18:45
标题: 输出流中用write时,什么时候需要用flush刷新?
本帖最后由 fanshuai 于 2015-2-21 10:59 编辑

如题。
按字符写入,按字符数组写入,按字节写入,按字节数组写入 这四种情况。
如果这时候要是停电不是也会丢失数据吗?每次都刷新感觉又浪费资源,到底什么时候要用flush刷新。

作者: 万合天宜    时间: 2015-2-20 19:12
fluse是写字符传输才会用到的,因为一个字符相当于两个字节。比如一扇门正好能进一个人,这时两个人一起走,肯定是进不了门的,但是只要在后面踹一脚,那就能进去了,fluse就是相当于踹一脚。
作者: fanshuai    时间: 2015-2-20 20:59
万合天宜 发表于 2015-2-20 19:12
fluse是写字符传输才会用到的,因为一个字符相当于两个字节。比如一扇门正好能进一个人,这时两个人一起走 ...

用write按字符写入,按字符数组写入也可以用flush吗?可是看视频里没有用,是怕占用资源吗?
是不是一次写一行才需要接着flush,其他的都不需要。
作者: mengxiang1993    时间: 2015-2-20 21:35
flush()用于刷新缓冲区内容,一般会创建数组,将字节或者字符读入数组,比如
byte[] b=new byte[1024]; out.read(b); 这时候要flush:因为字节被写入到缓存区了,然后得将缓冲区内容冲刷到文件输出流中去,然后将字节写入到文件
作者: xyf19881010    时间: 2015-2-21 00:56
首先明白,为什么要刷新:这是因为带走缓冲区的缘故。缓冲区就是为了减少IO操作次数而在内存划分出来的一块区域,我们write的时候,先写到这个缓冲区,一般是缓冲区满了之后就自动写入目的地,例如硬盘。而当没有满的时候,数据就不会自动到硬盘里去。此时就需要我们手动刷一把,相当于把没有满的缓冲区里面的数据全部倒到硬盘中,保持数据完整性。至于什么时候刷新,按理说只要最后刷一把就可以了,但是编程的时候写一次刷一次,安全系数更好




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2