【环境】

  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. powershell命令教程

    启动 powershell #字符串操作 对象操作 "hello".Length #进程操作 PS C:\> notepad PS C:\> $process=get- ...

  2. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_8.RabbitMQ研究-工作模式-发布订阅模式-生产者

    Publish/subscribe:发布订阅模式 发布订阅模式: 1.每个消费者监听自己的队列. 2.生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将 ...

  3. Qt编写数据可视化大屏界面电子看板10-改造QCustomPlot

    一.前言 为了抛弃对QChart的依赖,以及echart的依赖,(当然,后期也会做qchart的版本和echart的版本,尤其是echart的版本是肯定会做的,毕竟echart的效果牛逼的一塌糊涂,全 ...

  4. Qt编写数据可视化大屏界面电子看板7-窗体浮动

    一.前言 窗体浮动的场景也比较多,用途也比较大,比如视频监控模块,有时候需要调整大小和位置,而不是作为dock嵌入到布局中,一旦嵌入到布局中,大小和位置都被布局接管了,只能任由布局使唤,按在地上摩擦的 ...

  5. 【401】Python 求合数的所有质数因子

    对于这样的一个题目来说,出看来,可能会想到判断是否为质数,但其实并不需要. 只要按照从2开始遍历,只要遇到可以整除的就是想要的质数,理由是,如果遇到合数的话,那么在此之前一定会遇到这个合数的质因子,因 ...

  6. maven编译正常,运行报错:中没有主清单属性

    在pom.xml添加插件 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId&g ...

  7. webdriver(chrome无头浏览器)

    '''chrome无头浏览器''' from selenium.webdriver.chrome.options import Options # 导入相应的类 from selenium impor ...

  8. PHP中include、require、include_once、require_once的区别

    include:使用include引用外部文件时,只有代码执行到include代码段时,调用的外部文件才会被引用并读取,当引用的文件发生错误时,系统只会给出个警告错误,而整个php文件会继续执行.re ...

  9. vue中 :style 与 :class 三元运算符使用

    参考链接:https://www.jianshu.com/p/31664974303d

  10. Django边角料

    模型层表名自定义: class Record(models.Model): content=models.CharField(max_length=32,db_column='record_conte ...