国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

IO之ByteArrayOutputStream源碼分析

GitCafe / 600人閱讀

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

ByteArrayOutputStream一共有兩個屬性

    protected byte buf[];//存放數據的字節數組
    protected int count;//buf的索引

write()方法

    public synchronized void write(int b) {
        ensureCapacity(count + 1);//判斷buf的容量是否夠存放數據
        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)//已經最大容量
            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);//上面已經分析
        System.arraycopy(b, off, buf, count, len);//通過數組拷貝將b[]的數據復制到buf[]中去
        count += len;//設置當前數據的長度
    }

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

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

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

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

close(),這是一個空實現,說明數據寫到內存中沒有占用資源

  public void close() throws IOException {
    }

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76327.html

相關文章

  • IOByteArrayOutputStream源碼分析

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

    Integ 評論0 收藏0
  • JAVA IO源碼學習系列一(ByteArrayOutputStream

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

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

    摘要:大家好,樂字節小樂又來了。上一篇給大家帶來的是中的流之輸入流樂字節,本文將繼續講述流之輸出流。一輸出流抽象類和和也非常相似。從上述的字節數組中,讀取字符串。 大家好,樂字節小樂又來了。上一篇給大家帶來的是:Java中的IO流之輸入流|樂字節,本文將繼續講述IO流之輸出流。showImg(https://segmentfault.com/img/bVbvQx1?w=600&h=338);...

    CoderStudy 評論0 收藏0
  • 我的阿里路+Java面經考點

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

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

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

    mtunique 評論0 收藏0

發表評論

0條評論

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