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 是缓冲字符输出流类,当有数据需要输出时,会优先保存在缓冲区,缓冲区满的时候,自动输出到被包装流。如果单次需要输出的数据过大(大于缓冲区大小),则不会使用缓冲区,会先强刷清空缓冲区,再直接输出本次需要输出的数据。
javaIO——BufferedWriter的更多相关文章
- java基础知识回顾之javaIO类---BufferedReader和BufferedWriter
使用了装饰设计模式:此类的设计是为了提高流操作数据的效率.思想就是定义容器将数据进行临时存储,对于缓冲区对象,其实就是将这个容器进行了分装,并提供了更高效的操作方法. BufferReader: pa ...
- Java基础---Java---IO流-----BufferedReader、BufferedWriter、缓冲区、装饰设计模式及和继承的区别
IO流 IO流用来处理设备之间的数据传输 java对数据的操作是过流的方式 流按操作数据分为两种:字节流与字符流 流按流向分为:输入流,输出流. IO流常用基类 字节流的抽象基类:InputStrea ...
- Java-IO之BufferedWriter(字符缓冲输出流)
BufferedWriter是字符缓冲输出流,继承于Writer,作用是为其他字符输出流添加一些缓冲功能. BufferedWriter主要的函数列表: BufferedWriter(Writer o ...
- Java-IO流之BufferedReader 和BufferedWriter的使用和原理
BufferedReader和BufferedWriter出现的目的是为了对FileReader以及FileWriter的读写操作进行增强,而怎么增强呢,原理类似于使用StringBuilder,是把 ...
- [二十一]JavaIO之BufferedReader 与 BufferedWriter
功能简介 BufferedReader 从字符输入流中读取文本,内部缓冲各个字符,从而实现字符.数组和行的高效读取 BufferedWriter 将文本写入字符输出流,内部缓冲各个字符,从而提供单个 ...
- java-IO流-字符流-FileReader、FileWriter、自定义小数组的拷贝、BufferedReader、BufferedWriter、readLine()和newLine()方法、LineNumberReader、使用指定的码表读写字符
###21.01_IO流(字符流FileReader) * 1.字符流是什么 * 字符流是可以直接读写字符的IO流 * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要 ...
- javaIO系统----再看装饰者模式
javaIO系统拥有各种各样的类,尤其是每次要进行读写操作时,总会一层套一层的new,以前不明白为什么要这样做,不过学习了适配器模式后,对于这种做法立刻了解了:动态扩展IO的功能,使之符合使用者的习惯 ...
- Java学习日记之 Java-IO流
Java中的IO流在处理上分为字节流和字符流.字节流和字符流的区别 : 1.字节流读取的时候,读到一个字节就返回一个字节: 字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8 ...
- javaIO框架小析
IO即数据读写.数据是应用的中心要素,而数据读写的能力和可扩展性是编程平台的基础支撑. 概念框架 方式: 字节流 Byte 和 字符流 Char 方向: 输入 Input 和 输出 Output : ...
随机推荐
- PHP学习之分页类
<?php $page = new Page(2, 40); var_dump($page->allUrl()); class Page { //每页显示多少条数据 protected $ ...
- Swift 自动引用计数(ARC)
Swift 使用自动引用计数(ARC)这一机制来跟踪和管理应用程序的内存 通常情况下我们不需要去手动释放内存,因为 ARC 会在类的实例不再被使用时,自动释放其占用的内存. 但在有些时候我们还是需要在 ...
- 15 Flutter BottomNavigationBar自定义底部导航条 以及实现页面切换 以及模块化
效果: /** * Flutter BottomNavigationBar 自定义底部导航条.以及实现页面切换: * BottomNavigationBar是底部导航条,可以让我们定义底部Tab ...
- 实现在线阅读WORD,PDF等文件,JAVA,PHP都可以
1 <?php 2 //header("Content-type:text/html;charset=utf-8"); 3 //word转html 展示 4 $lj=$_GE ...
- RabbitMQ运转流程
生产者发送消息的过程 生产者连接到RabbitMQ Broker(相当于是一个RabbitMQ服务器),建立一个连接(Connection),开启一个信道(Channel). 生产者声明一个交换器(E ...
- JUC AQS ReentrantLock源码分析
警告⚠️:本文耗时很长,先做好心理准备,建议PC端浏览器浏览效果更佳. Java的内置锁一直都是备受争议的,在JDK1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6 ...
- 学习Yii(3)
组件 Component的或其子类的实例.属性和事件 组件的属性.(名称大小写不敏感) 可读可写,就像对象的公共成员变量. 通过$component->属性名.获取属性值.$component- ...
- 324rfwrtg5gft8oywtfbserkufgs
324rfwrtg5gft8oywtfbserkufgs (tester.inf.nano)
- (4)Linux命令分类汇总(13~16)
Linux命令分类汇总(13~16) (十三)系统管理与性能监视命令(9个) 79 chkconfig 管理Linux系统开机启动项. 80 vmstat 虚拟内存统计. 81 ...
- CF1187E Tree Painting
思路: 树形dp,首先使用dp计算以1为根的时候的最大分数,同时得到各个子树i的最大分数dp[i].然后利用前面得到的dp数组分别计算以其他每个点作为根的时候的最大分数. 实现: #include & ...