java bufferedwrite_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. 定义和构造

先看看源码

3e49ad416ab3a68d5485b36543f04c9f.png

8ffb4eb262fe26ce64418fbdd7deb820.png

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

3. 核心方法

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

cc6d645af871aa78ff09af05c99217f2.png

ce276facd35edb6a3b191e761e6416b9.png

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

7ac9e80e4a9f414b51da016673de9a01.png

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

bf8a42341a814509b8200b5d68d85b06.png

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

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

3.4. 再提一下 close() 方法

b51256cd628cd7acd2be65db1c0a4ba8.png

4. 总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值