成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

IO之ByteArrayOutputStream源碼分析

Integ / 1745人閱讀

摘要:一共有兩個屬性存放數(shù)據(jù)的字節(jié)數(shù)組的索引方法判斷的容量是否夠存放數(shù)據(jù)如果容量不夠了,則擴容加倍擴容已經(jīng)最大容量擴展到最大容量另一個方法上面已經(jīng)分析通過數(shù)組拷貝將的數(shù)據(jù)復(fù)制到中去設(shè)置當前數(shù)據(jù)的長度方法直接將設(shè)置為,那么下次在寫數(shù)據(jù)的

ByteArrayOutputStream一共有兩個屬性

    protected byte buf[];//存放數(shù)據(jù)的字節(jié)數(shù)組
    protected int count;//buf的索引

write()方法

    public synchronized void write(int b) {
        ensureCapacity(count + 1);//判斷buf的容量是否夠存放數(shù)據(jù)
        buf[count] = (byte) b;
        count += 1;
    }
  private void ensureCapacity(int minCapacity) {
        // overflow-conscious code
        if (minCapacity - buf.length > 0)
            grow(minCapacity);//如果容量不夠了,則擴容
  }
   private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = buf.length;
        int newCapacity = oldCapacity << 1;//加倍擴容
        if (newCapacity - minCapacity < 0)//已經(jīng)最大容量
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);//擴展到最大容量
        buf = Arrays.copyOf(buf, newCapacity);
    }
   private static int hugeCapacity(int minCapacity) {
        if (minCapacity < 0) // overflow
            throw new OutOfMemoryError();
        return (minCapacity > MAX_ARRAY_SIZE) ?
            Integer.MAX_VALUE :
            MAX_ARRAY_SIZE;
  }

另一個write方法

    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);//上面已經(jīng)分析
        System.arraycopy(b, off, buf, count, len);//通過數(shù)組拷貝將b[]的數(shù)據(jù)復(fù)制到buf[]中去
        count += len;//設(shè)置當前數(shù)據(jù)的長度
    }

reset()方法,直接將count設(shè)置為0,那么下次在寫數(shù)據(jù)的時候,直接從索引0開始寫數(shù)據(jù)

    public synchronized void reset() {
        count = 0;
    }

toByteArray()方法,這個很簡單,就是將buf[]數(shù)據(jù)返回,不過需要注意的是,這個操作是會double內(nèi)存的,數(shù)據(jù)量太大會很占內(nèi)存

   public synchronized byte toByteArray()[] {
        return Arrays.copyOf(buf, count);
    }

close(),這是一個空實現(xiàn),說明數(shù)據(jù)寫到內(nèi)存中沒有占用資源

  public void close() throws IOException {
    }

好了,到這里ByteArrayOutputStream的源碼也就分析完成了。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68816.html

相關(guān)文章

  • IOByteArrayOutputStream源碼分析

    摘要:一共有兩個屬性存放數(shù)據(jù)的字節(jié)數(shù)組的索引方法判斷的容量是否夠存放數(shù)據(jù)如果容量不夠了,則擴容加倍擴容已經(jīng)最大容量擴展到最大容量另一個方法上面已經(jīng)分析通過數(shù)組拷貝將的數(shù)據(jù)復(fù)制到中去設(shè)置當前數(shù)據(jù)的長度方法直接將設(shè)置為,那么下次在寫數(shù)據(jù)的 ByteArrayOutputStream一共有兩個屬性 protected byte buf[];//存放數(shù)據(jù)的字節(jié)數(shù)組 protected...

    GitCafe 評論0 收藏0
  • JAVA IO源碼學(xué)習系列一(ByteArrayOutputStream

    介紹 1. 輸出流:ByteArrayOutputStream 上一篇簡單介紹了輸出流的超類OutputStream,也大概的講述了輸出流的作用,本篇就介紹一下,輸出流的一種實現(xiàn),字節(jié)數(shù)組輸出流,該輸出流是為了處理字節(jié)的基礎(chǔ)流,本質(zhì)上就是寫入數(shù)據(jù)到類中的緩沖字節(jié)數(shù)組中; 2. ByteArrayOutputStream 源代碼介紹 (1)屬性內(nèi)容:屬性內(nèi)容相較輸入流的會有存放數(shù)據(jù)的緩沖區(qū),也就是字...

    oujie 評論0 收藏0
  • Java中的IO輸出流|樂字節(jié)

    摘要:大家好,樂字節(jié)小樂又來了。上一篇給大家?guī)淼氖侵械牧髦斎肓鳂纷止?jié),本文將繼續(xù)講述流之輸出流。一輸出流抽象類和和也非常相似。從上述的字節(jié)數(shù)組中,讀取字符串。 大家好,樂字節(jié)小樂又來了。上一篇給大家?guī)淼氖牵篔ava中的IO流之輸入流|樂字節(jié),本文將繼續(xù)講述IO流之輸出流。showImg(https://segmentfault.com/img/bVbvQx1?w=600&h=338);...

    CoderStudy 評論0 收藏0
  • 我的阿里路+Java面經(jīng)考點

    摘要:我的是忙碌的一年,從年初備戰(zhàn)實習春招,年三十都在死磕源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實習。因為我心理很清楚,我的目標是阿里。所以在收到阿里之后的那晚,我重新規(guī)劃了接下來的學(xué)習計劃,將我的短期目標更新成拿下阿里轉(zhuǎn)正。 我的2017是忙碌的一年,從年初備戰(zhàn)實習春招,年三十都在死磕JDK源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實習offer。然后五月懷著忐忑的心情開始了螞蟻金...

    姘擱『 評論0 收藏0
  • RedisSerializerJdkSerializationRedisSerializer分析

    摘要:類圖結(jié)構(gòu)如上,主要流程如下類實現(xiàn)接口類中和接口。對于,通過定義對象并調(diào)用方法對進行反序列化。底層還是通過調(diào)用的操作和類實現(xiàn)的序列化和反序列化。 showImg(https://segmentfault.com/img/bVJxmP?w=938&h=672); redis在緩存POJO的時候需要將POJO序列化為byte數(shù)組進行存儲,spring-data-redis實現(xiàn)了類JdkSer...

    mtunique 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<