关于java的flush

java中在write()方法后尽量手动调用flush()方法,原因呢:
这里首先应该对I/O对计算机体系结构要有一个简单的了解,计算机分为运算器、控制器、存储器、输入/输出。cpu由运算器、控制器和寄存器等等组成。存储器分为内存和外存,这里简单说一下I/O。
I/O主要是对外存的读/写,而cpu的速度远远大于I/O,此时就有很多策略解决,这时将数据加入缓冲区是一个高效的方法,这样减少了cpu的I/O次数,提高运行效率,但是read()和write()是线程阻塞的,当某个线程向另一网络节点读写数据时,当发生网络连接异常或服务器短暂无响应,这会发生线程阻塞,同样在无数据进行读取或者数据已满进行写操作时,同样会发生阻塞,这是其他线程抢占资源,缓冲区的数据不能及时输送需要等到竞争到cpu时间才可以发送,还有一种策略是当缓冲区长度满了以后才会将缓冲区发送,这样,若到了文件末尾往往会因为缓冲未满导致数据未发送,此时在write()后手动调用flush(),这样手动强制将数据发送,不会有数据滞留在缓冲区中,这种事情会经常发生,应该注意再次特做笔记。

这里就有之前碰到的例子:数据在缓冲中滞留https://blog.csdn.net/small__snail__5/article/details/87196948

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值