博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java.io.BufferedOutputStream 源码分析
阅读量:7064 次
发布时间:2019-06-28

本文共 1521 字,大约阅读时间需要 5 分钟。

BufferedOutputStream  是一个带缓冲区的输出流,通过设置这种输出流,应用程序就可以字节写入到缓冲区中,当缓冲区满了以后再调用底层系统,而不必针对每次字节写入调用底层系统,从而提高系统性能。

 

俩个成员变量,buf是存储字节数据的内部缓冲区,count是缓冲区中的有效字节数。

protected byte buf[];    protected int count;

 

构造参数可以指定缓冲区的大小,可以使用默认值8192,也可以自定义大小。

public BufferedOutputStream(OutputStream out) {        this(out, 8192);    }     public BufferedOutputStream(OutputStream out, int size) {        super(out);        if (size <= 0) {            throw new IllegalArgumentException("Buffer size <= 0");        }        buf = new byte[size];    }

 

刷新缓冲区数据到底层输出流。

private void flushBuffer() throws IOException {        if (count > 0) {            out.write(buf, 0, count);            count = 0;        }    }

 

输出一个字节。

public synchronized void write(int b) throws IOException {
     //判断缓冲区buf是否已满,满了就调用底层流将数据写进去。 if (count >= buf.length) { flushBuffer(); }      //将字节放入到缓冲区中 buf[count++] = (byte)b; }

 

输出多个字节,

public synchronized void write(byte b[], int off, int len) throws IOException {        //判断输出字节的大小,如果大于缓存区的大小,说明缓冲区装不下,那么刷新缓冲区,并将字节数据直接输出到底层流。        if (len >= buf.length) {            flushBuffer();            out.write(b, off, len);            return;        }        //如果缓冲区剩余空间不够,那么刷新缓冲区        if (len > buf.length - count) {            flushBuffer();        }        //将输出字节写入到缓冲区当buf中        System.arraycopy(b, off, buf, count, len);        count += len;    }

 

刷新输出流,将缓冲区的字节输出到底层流当中,同时刷新底层流。

public synchronized void flush() throws IOException {        flushBuffer();        out.flush();    }

转载地址:http://urtll.baihongyu.com/

你可能感兴趣的文章
分享我的个人项目:Wildfire 野火评论系统
查看>>
【机器视觉与图像处理】基于MATLAB的角度计算
查看>>
一篇很全面的IOS面试题(下)
查看>>
极简.高性能.分布式框架,可运行于多种环境(apache/php-fpm,swoole)
查看>>
DESTOON7.0农产品B2B供应求购交易平台源码
查看>>
node js 批量处理pdf,提取关键信息,并导出excel
查看>>
05 Objective C数组的四种遍历方法总结
查看>>
少侠请重新来过 - Vue学习笔记(五) - 指令
查看>>
重学前端(六)-JavaScript中的class
查看>>
技术并非一切,做做 Side Project 吧
查看>>
ViewPager+seekBar的联动效果
查看>>
RPA:制造业的下一个改变者
查看>>
VSCode Python开发环境配置
查看>>
208道 java 高频面试题和答案
查看>>
nginx反向代理配置
查看>>
MySQL学习笔记 初学基础篇
查看>>
一步步教你用 CSS 为 SVG 添加过滤器
查看>>
TeeChart Pro VCL/FMX教程(一):入门——构建图表
查看>>
微服务架构 SpringCloud(二)Eureka(服务注册和服务发现基础篇)
查看>>
oracle RAC的客户端HA配置
查看>>