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

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

ByteArrayOutputStream 内部包含了一个缓冲区,缓冲区会随着数据的不断写入而自动增长,俗称内存流。

 

首先看一下俩个属性,buf是内部缓冲区,count是记录写入了多少个字节。

protected byte buf[];protected int count;

 

 

这个方法会在每次写入前都调用,检查buf的容量,如果缓冲区不够了会进行扩容。

private void ensureCapacity(int minCapacity) {        // overflow-conscious code        if (minCapacity - buf.length > 0)            grow(minCapacity);    }

 

扩容的方法。

private void grow(int minCapacity) {
    int oldCapacity = buf.length;     //新的长度是原来的长度乘2 <
<左移一位等于乘2    int newcapacity="oldCapacity">
<< 1;     //如果新的长度仍然不够那么将minCapactity设置为缓冲区的大小    if (newCapacity - minCapacity < 0) newCapacity = minCapacity;    if (newCapacity < 0) {
      if (minCapacity < 0) // overflow 判断溢出        throw new OutOfMemoryError(); newCapacity = Integer.MAX_VALUE; }     //返回一些新的缓冲区,并且拷贝原来的字节数据。 buf = Arrays.copyOf(buf, newCapacity); }

 

写入方法会将字节写入到缓冲区当中.

public synchronized void write(int b) {        ensureCapacity(count + 1);        buf[count] = (byte) b;        count += 1;    }    public synchronized void write(byte b[], int off, int len) {        if ((off < 0) || (off > b.length) || (len < 0) ||            ((off + len) - b.length > 0)) {            throw new IndexOutOfBoundsException();        }        ensureCapacity(count + len);        System.arraycopy(b, off, buf, count, len);        count += len;    }

 

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

你可能感兴趣的文章
揭秘『边缘计算』“搅局”沪深股市的背后
查看>>
大麦网启动“麦香计划”,将投3亿元布局戏剧内容领域
查看>>
蔚来自曝今年上半年或仍承压 卖车是收入主要来源
查看>>
第二十一章:变换(七)
查看>>
IJCAI 2019 新增特邀讲者:索尼计算机科学实验室主席兼 CEO 北野宏明博士
查看>>
checksum建立的索引
查看>>
Linux网络编程笔记(修订版)
查看>>
由《惊天魔盗团》改编的VR游戏登陆Gear VR
查看>>
安全防护与配置
查看>>
Sort the Array
查看>>
技术分享:逆向海盗船k95机械键盘
查看>>
VNN简介很好的网络软件工具
查看>>
使用 sitemesh/decorator装饰器装饰jsp页面(原理及详细配置)
查看>>
CentOS6.2安装Oracle 11g
查看>>
第五-六单元练习
查看>>
python作业
查看>>
vsftp2
查看>>
FileGee文件同步备份(增量备份)
查看>>
Cacti之交换机端口无法正常显示
查看>>
行为识别研究摘录
查看>>