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();
}

最新文章

  1. &lt;&lt;&lt; Java提取网页源码
  2. MySQL数据库8 -子查询,联合查询
  3. 源码分析:Java对象的内存分配
  4. 使用了Windows Live Writer 写的博客
  5. 通用数据链接(UDL)的用法
  6. 在Oracle 11g r2中,EXP无法导出个别空的表
  7. STL之Pairs
  8. sql 针对拼接语句的优化
  9. ionic常用命令记录
  10. SQL查询每个部门工资前三名的员工信息
  11. jstl 处理字符串
  12. Java中的最值
  13. 用CSS指定外部链接的样式
  14. Java单例模式的实现
  15. polyfillJS生成promise对象
  16. mongodb 创建更新语法
  17. window.print打印方法实现
  18. JS调用百度地图API标记地点
  19. vue 子组件把数据传递给父组件
  20. Basic4android v3.00 发布

热门文章

  1. jota-time 练习
  2. hbase ERROR: wrong number of arguments (3 for 4)
  3. Nginx(七):keepalived实现Nginx负载均衡服务器的双机高可用
  4. Traefik Kubernetes 初试
  5. 不要随便使用 runAllManagedModulesForAllRequests=&quot;true&quot; 来解决问题
  6. scp拷贝文件
  7. mybatis 多数据源
  8. mysql定时执行某任务
  9. cocos2d-x---CCLabelTTF加载字体库
  10. CCObject