zoukankan      html  css  js  c++  java
  • javaIO——BufferedWriter

    【环境】

      jdk1.8

      前面学习过 BufferedReader,是缓冲字符输入流。那么今天来学习对应的缓冲字符输出流类:BufferedWriter。跟 BufferedReader 同理,它也是一个包装类,需要提供目标输出流。

    1. 注释解释

      Writes text to a character-output stream, buffering characters so as to provide for the efficient writing of single characters, arrays, and strings.

      写文本到字符输出流,通过缓冲字符以提供对单个字符、数组和字符串的高效输出。

    2. 定义和构造

      先看看源码

        

        

      可以看出,构造方法需要传入一个 Writer 实例,并且使用指定或者默认的缓冲区大小 private static int defaultCharBufferSize = 8192; 初始化一个字符缓冲区数组。

    3. 核心方法

      3.1. 因为该类也是输出流一族,所以先来看看必不可少的 write 方法们:

        

        

      3.2. 从几个 write 方法可以看出,真正将数据写入输出流的就是 flushBuffer 方法了:

        

      3.3. 另外,跟其它输出流一样,BufferedWriter 也提供了 flush 方法:

        

        如上图所提问的,既然已经调用了 flushBuffer() 方法,为什么还要调用 flush 方法呢?

        咋一看好像是多余,其实仔细想想就明白了:flushBuffer() 只是将当前这个缓冲输出流的缓冲区清空;而 flush() 方法是整个输出流家族的一个约定方法,目的是将数据强制输出到目标地,它的行为目标就是要将数据输出到最终的目的地(就算是有阻塞,那也是操作系统的事情了,对于java程序而言能做的都做了,flush 已经尽了最大努力)。想想假如被当前缓冲流包装的仍然是一个缓冲流类(类似于多级缓冲),那么如果只调用 flushBuffer 的话,就只是把数据推到下一级缓冲区,并不能达到 flush 方法约定的功能目的。

      3.4. 再提一下 close() 方法

        

    4. 总结

      BufferedWriter 是缓冲字符输出流类,当有数据需要输出时,会优先保存在缓冲区,缓冲区满的时候,自动输出到被包装流。如果单次需要输出的数据过大(大于缓冲区大小),则不会使用缓冲区,会先强刷清空缓冲区,再直接输出本次需要输出的数据。

  • 相关阅读:
    [Linux/wine.笔记]关于WINE(Linux上运行Windows程序的兼容层)
    [docker.笔记]常用命令
    [技巧.DotNet]超级好用的动态对象ExpandoObject
    .net core 的窗体设计器进展(.NET Core Windows Forms designer),5月中旬或将发布成熟版!
    [问题记录.Oracle/odp.net]托管ODP中,连接池的连接验证参数(validate connection=true)无效?
    [JWT]Json Web Token 备忘
    [MQ]RabbitMQ的概要介绍及消息路由规则
    常见排序算法
    C语言数值存储溢出探讨
    从计算理解数组
  • 原文地址:https://www.cnblogs.com/coding-one/p/11379101.html
Copyright © 2011-2022 走看看