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的移動,才能正確的讀取值。