【环境】

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

javaIO——BufferedWriter的更多相关文章

  1. java基础知识回顾之javaIO类---BufferedReader和BufferedWriter

    使用了装饰设计模式:此类的设计是为了提高流操作数据的效率.思想就是定义容器将数据进行临时存储,对于缓冲区对象,其实就是将这个容器进行了分装,并提供了更高效的操作方法. BufferReader: pa ...

  2. Java基础---Java---IO流-----BufferedReader、BufferedWriter、缓冲区、装饰设计模式及和继承的区别

    IO流 IO流用来处理设备之间的数据传输 java对数据的操作是过流的方式 流按操作数据分为两种:字节流与字符流 流按流向分为:输入流,输出流. IO流常用基类 字节流的抽象基类:InputStrea ...

  3. Java-IO之BufferedWriter(字符缓冲输出流)

    BufferedWriter是字符缓冲输出流,继承于Writer,作用是为其他字符输出流添加一些缓冲功能. BufferedWriter主要的函数列表: BufferedWriter(Writer o ...

  4. Java-IO流之BufferedReader 和BufferedWriter的使用和原理

    BufferedReader和BufferedWriter出现的目的是为了对FileReader以及FileWriter的读写操作进行增强,而怎么增强呢,原理类似于使用StringBuilder,是把 ...

  5. [二十一]JavaIO之BufferedReader 与 BufferedWriter

    功能简介 BufferedReader  从字符输入流中读取文本,内部缓冲各个字符,从而实现字符.数组和行的高效读取 BufferedWriter 将文本写入字符输出流,内部缓冲各个字符,从而提供单个 ...

  6. java-IO流-字符流-FileReader、FileWriter、自定义小数组的拷贝、BufferedReader、BufferedWriter、readLine()和newLine()方法、LineNumberReader、使用指定的码表读写字符

    ###21.01_IO流(字符流FileReader) * 1.字符流是什么     * 字符流是可以直接读写字符的IO流     * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要 ...

  7. javaIO系统----再看装饰者模式

    javaIO系统拥有各种各样的类,尤其是每次要进行读写操作时,总会一层套一层的new,以前不明白为什么要这样做,不过学习了适配器模式后,对于这种做法立刻了解了:动态扩展IO的功能,使之符合使用者的习惯 ...

  8. Java学习日记之 Java-IO流

    Java中的IO流在处理上分为字节流和字符流.字节流和字符流的区别 : 1.字节流读取的时候,读到一个字节就返回一个字节:  字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8 ...

  9. javaIO框架小析

    IO即数据读写.数据是应用的中心要素,而数据读写的能力和可扩展性是编程平台的基础支撑. 概念框架 方式: 字节流 Byte 和 字符流 Char 方向: 输入 Input 和 输出 Output : ...

随机推荐

  1. Fegin的使用总结

    /** * * @Description: 修改microservicecloud-api工程,根据已经有的DeptClientService接口 新建,MICROSERVICECLOUD-DEPT指 ...

  2. 安装vue模板时,选择webpack-simple还是Webpack?

    选用模板常用的是webpack与webpack-simple.webpack-simple是基于Webpack@2.1.0-beta.25进行配置的版本,而webpack模板则是基于Webpack ^ ...

  3. SQL-W3School-高级:SQL INNER JOIN 关键字

    ylbtech-SQL-W3School-高级:SQL INNER JOIN 关键字 1.返回顶部 1. SQL INNER JOIN 关键字 在表中存在至少一个匹配时,INNER JOIN 关键字返 ...

  4. opc 带有session

    现在使用java来做工控系统的几种方式: 知识储备: 一.OPC Server端目前常见的有以下几种协议: 参考博客:https://www.cnblogs.com/ioufev/articles/9 ...

  5. windows下libnet ARP

    查找自己的网卡: #include <libnet.h> #include <stdio.h> #include <iostream> #pragma commen ...

  6. 【编程开发】opencv实现对Mat中某一列或某一行的元素进行normalization

    [编程开发]opencv实现对Mat中某一列或某一行的元素进行normalization 标签: [编程开发] [机器学习] 声明:引用请注明出处http://blog.csdn.net/lg1259 ...

  7. CentOS 7系统KVM虚拟机安装过程详解

    什么是 KVM ? KVM 在标准的 Linux 内核中增加了虚拟技术,从而我们可以通过优化的内核来使用虚拟技术.在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以 ...

  8. Django使用DataTables插件总结

    Django使用Datatables插件总结 文章中的例子已上传至github 基本使用 Datatables插件是一款方便简单的展示数据的列表插件.关于基本使用,官方网站上的已介绍的很详细,这里我再 ...

  9. -- 1 -- springboot

    目录 一.Maven依赖 二.配置文件 三.RESTful API 四.编写RESTful和测试用例. 五.数据验证 六.异常处理 七.对API的拦截 七.文件上传下载 八.异步处理 框架或工具:Lo ...

  10. IDEA操作之FileHeager设置

    作用:头部注释添加,一般用于记录类的创建者等信息. 1. 打开配置 File->Settings->Editor->File and Code Templates->Inclu ...