zoukankan      html  css  js  c++  java
  • java.io.BufferedOutputStream 源码分析

    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();
        }
  • 相关阅读:
    IDE-Sublime【3】-配置Node.js开发环境
    Java-Android【2】-弹出对话框
    Node.js-中文分词【1】-node-segment
    Java-Android【1】-控制手机震动
    IDE-Sublime【2】-代码智能提示插件SublimeCodeIntel的安装
    Node.js-安装配置【1】-在Windows XP系统配置环境变量
    Node.js-部署【1】-防火墙端口的配置
    Node.js-npm【1】-常用命令
    Node.js-视图引擎【1】-Swig集成express的安装与配置
    NoSQL-Redis【2】-HDEL给我的一个惊喜
  • 原文地址:https://www.cnblogs.com/daxin/p/3772278.html
Copyright © 2011-2022 走看看