您现在的位置是:首页 > 文章详情

java源码-BufferedWriter

日期:2018-09-11点击:331

开篇

BufferedWriter和BufferedReader是对称的,一并分析下源码。


源码分析

构造函数

  • BufferedWriter的构造函数通过缓冲区char cb[]数组保存待持久化字符
  • 缓存区默认大小为8192
  • BufferedWriter跟BufferedReader一样采用装饰者模式进行设计,通过内部Writer out对象保存被装饰的Writer对象。
  • BufferedWriter的写操作通过被装饰的out对象进行数据写入。
public class BufferedWriter extends Writer { private Writer out; private char cb[]; private int nChars, nextChar; private static int defaultCharBufferSize = 8192; private String lineSeparator; public BufferedWriter(Writer out) { this(out, defaultCharBufferSize); } public BufferedWriter(Writer out, int sz) { super(out); if (sz <= 0) throw new IllegalArgumentException("Buffer size <= 0"); this.out = out; cb = new char[sz]; nChars = sz; nextChar = 0; lineSeparator = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("line.separator")); } 



write过程

  • write过程先把数据写到缓冲区cb数组当中
  • 当缓冲区cb数组当中的字符超出最大缓存区大小,那么就执行flush保存数据
 public void write(int c) throws IOException { synchronized (lock) { ensureOpen(); // 超出缓存区大小就执行flush操作 if (nextChar >= nChars) flushBuffer(); cb[nextChar++] = (char) c; } } void flushBuffer() throws IOException { synchronized (lock) { ensureOpen(); if (nextChar == 0) return; // 将数据通过out对象进行持久化 out.write(cb, 0, nextChar); // 重置缓冲区的起始位置 nextChar = 0; } } } 


类依赖图

  • BufferedWriter的类依赖图如下图,所有的io writer都是继承自Writer作为基类。
img_f109ac82a9c707e94ce6380e6c2fb48e.png
原文链接:https://yq.aliyun.com/articles/666288
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章