java源码-BufferedWriter

简介: 开篇 BufferedWriter和BufferedReader是对称的,一并分析下源码。源码分析构造函数BufferedWriter的构造函数通过缓冲区char cb[]数组保存待持久化字符缓存区默认大小为8192BufferedWriter跟BufferedReader一样采用装饰者模式进行设计,通过内部Writer out对象保存被装饰的Writer对象。

开篇

 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
目录
相关文章
|
27天前
|
安全 小程序 Java
基于Java实训中心管理系统设计和实现(源码+LW+调试文档+讲解等)
基于Java实训中心管理系统设计和实现(源码+LW+调试文档+讲解等)
|
27天前
|
存储 安全 Java
基于Java+MySQL停车场车位管理系统详细设计和实现(源码+LW+调试文档+讲解等)
基于Java+MySQL停车场车位管理系统详细设计和实现(源码+LW+调试文档+讲解等)
|
27天前
|
存储 小程序 Java
基于Java图书馆管理系统详细设计和实现(源码+LW+调试文档+讲解等)
基于Java图书馆管理系统详细设计和实现(源码+LW+调试文档+讲解等)
|
27天前
|
搜索推荐 算法 小程序
基于Java协同过滤算法的电影推荐系统设计和实现(源码+LW+调试文档+讲解等)
基于Java协同过滤算法的电影推荐系统设计和实现(源码+LW+调试文档+讲解等)
|
26天前
|
数据采集 监控 前端开发
JAVA公立医院绩效考核管理系统源码-对接HIS数据
在医院的工作和管理上,院领导需要对院内工作人员的工作情况进行了解、评价和监控。 下面将对医院绩效管理系统的HIS数据流程加以阐述。
25 1
JAVA公立医院绩效考核管理系统源码-对接HIS数据
|
13天前
|
JavaScript Java 测试技术
基于Java的智慧医疗服务平台系统设计和实现(源码+LW+部署讲解)
基于Java的智慧医疗服务平台系统设计和实现(源码+LW+部署讲解)
35 8
|
13天前
|
JavaScript Java 测试技术
基于Java的人事管理系统设计和实现(源码+LW+部署讲解)
基于Java的人事管理系统设计和实现(源码+LW+部署讲解)
26 7
|
13天前
|
JavaScript Java 测试技术
基于Java的儿童福利院管理系统设计和实现(源码+LW+部署讲解)
基于Java的儿童福利院管理系统设计和实现(源码+LW+部署讲解)
38 7
|
15天前
|
运维 Java BI
java云HIS系统源码,基层医院his系统
云HIS系统,基于B/S架构的SaaS服务,助力基层医院实现挂号、诊疗、电子病历、药品管理等全面业务。系统分为综合管理(运营商、开发者、监管使用)和业务系统(医院使用)。综合管理涉及运维、监管和运营,包括机构、药品、用户、角色等管理。业务系统涵盖预约、收费、医生护士工作站、住院、药房、会员管理及统计等功能。系统可整合公卫、PACS等,实现多机构融合。
java云HIS系统源码,基层医院his系统
|
19天前
|
JavaScript 前端开发 Java
Java数字化产科管理系统源码,多家医院应用案例,可直接上项目
Java开发的数字化产科管理系统,已在多家医院实施,支持直接部署。系统涵盖孕产全程,包括门诊、住院、统计和移动服务,整合高危管理、智能提醒、档案追踪等功能,与HIS等系统对接。采用前后端分离架构,Java语言,Vue前端,若依框架,MySQL数据库。优势在于提升就诊效率,降低漏检率,自动报表生成,减少重复工作,支持数据研究,并实现医院与卫计委平台的数据互通,打造全生育周期健康服务。
31 4