Java IO的flush

Java的IO是一个大知识点, 如果把它的知识点拆开来说的话估计能说一个星期,关于IO的体系可以看看下面这张图, (图片是网上找的,侵删)

接下来我们从一段代码开始聊吧,先看看下面这段代码

public class Test {
    public static void main(String[] args) throws Exception {
        File file = new File("text.txt");
        if(!file.exists()) {
            file.createNewFile();
        }
        FileOutputStream fos = new FileOutputStream(file);
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        byte[] b = new byte[1024];
        bos.write(b);
        bos.flush();
    }
}

代码中构造了一个缓冲流,然后往流里写入一个KB长度的数据,最后调用 flush()方法。 这是很简单的一段代码,最终的输出结果是会生成一个 1KB的 text.text文件。

但如果我们把最后一行注释掉的话,

//bos.flush();

最终生成的 text.text大小会变成0. 这个结果是很显然的,不过如果我们把 flush()换成 close()的话,结果是不是还会是 0呢?

关于 flush

flush()这个东西,其实在很久以前的网络传输中就有了, 那个时候为了效率,服务器和客户端传输数据的时候不会每产生一段数据就传一段数据, 而是会建一个缓冲区,在缓冲区满之后再往客户端传输数据,

有时候会有这样的问题,当数据不足以填充缓冲区,而又需要往客户端传数据, 为了解决这个问题,就有了 flush的概念,将缓冲区的数据强迫发送。

回到上面的问题,如果把 flush换成 close是否可行呢, 答案是可以的。 如果看源码就知道 BufferedOutputStream的继承关系,

public class BufferOutputStream extends FilterOutputStream

BufferedOutputStream没有实现 close()方法,所以会直接调用 FilterOutputStream的 close(), 而 FilterOutputStream的 close()方法会调用 flush()来输出缓冲区数据。 实际开发中关于IO操作的,都强调最后要调用 close()方法, 上面的例子就是其中一个原因了。

本文分享自微信公众号 - Android每日一讲(gh_f053f29083b9)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 「我真的没有改需求」

    非著名程序员
  • 这是对付产品经理的一副毒药,程序员慎入

    程序员和产品经理的日常就像是一对天生的冤家,为了需求的实现,几乎天天在争吵。这不,就在昨天各大技术和产品群里一个程序员暴打产品经理的视频火了,被广泛传播。

    非著名程序员
  • 【系统设置】CentOS 修改机器名

    ken.io
  • 白底黑字or黑底白字,眼睛更喜欢哪一个?

    腾讯大讲堂
  • 今天我就说三句话

    腾讯NEXT学位
  • 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录

    从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负...

    haifeiWu
  • 不只是软件,在线也可以免费下载百度文库了。

    不管是学生,还是职场员工,下载各种文档几乎是不可避免的,各种XXX.docx,XXX.pptx更是家常便饭,人们最常用的就是百度文库,豆丁文库,道客巴巴这些下载...

    课代表
  • SQL中GROUP BY用法示例

    GROUP BY我们可以先从字面上来理解,GROUP表示分组,BY后面写字段名,就表示根据哪个字段进行分组,如果有用Excel比较多的话,GROUP BY比较类...

    Awesome_Tang
  • 知识体系解决迷茫的你

    最近在星球里群里都有小伙伴说道自己对未来的路比较迷茫,一旦闲下来就不知道自己改干啥,今天我这篇文章就是让你觉得一天给你 25 个小时你都不够用,觉得睡觉都是浪费...

    桃翁
  • 你可以从面试中学到什么?

    讲一下我对面试的一些。。。“偏见”,哈哈,熟悉我的同学们一定要批判的读接下来的内容哈。

    web前端教室

扫码关注云+社区

领取腾讯云代金券