java byte[]生成


1. ByteArrayOutputStream extends OutputStream

提供了一個byte數組,和記錄寫入數組值個數的類。

a.實現了write(int)這個抽象函數,這里默認只寫int的低位byte,同時多態實現write(byte b[], int off, int len)采用的數組處理方式。

b.內部保存了一個byte[]的數組,默認構造函數初始化數組大小為32,后期如果在write發現大小不夠了,將采用*2的機制擴初大小。

c.有一個count記錄了當期寫入數組的值的個數。

d.在輸出方面,我們常常希望提供直接把值輸出到其他輸出流比如socket stream中,或者直接轉化為數組進行下一步處理,甚至采用裝飾者模式在外面進行字符處理。

d.1.這里提供了writeTo(OutputStream out),直接把數據寫到流里面。

d.2.byte toByteArray()[] 將數據通過Arrays.copyOf獲取寫入的真正數據數組。

e.reset 清空數據 d1和d2僅僅把數據進行了輸出,原始數據任然在,如果需要清空數據,實際這里僅僅對count 清零處理。

f.上述byte[] 和 count因為可能涉及到同時讀寫,所以對他們的操作都進行了同步處理synchronized

 

2.ByteBuffer extends Buffer

給nio用的緩沖區,有direct vm外分配和no-direct堆兩種

 vs non-direct ByteBuffer : http://blog.csdn.net/chenyi8888/article/details/5343315

allocateDirect(int capacity):構造時我們需要指定大小,並且后期是無法更改大小的。

其數據錄入和讀取需要遵循Buffer機制,擁有position limit capacity mark等,其擁有寫入和讀取兩個過程,且從寫到度需要調用flip進行position的移動,才能正確的讀取值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM