pexels-matthew-devries-3773244.jpg
介紹:
Buffer可以理解成一個(gè)容器踪危,容器里面放指定的原始類型的數(shù)據(jù),在java.nio包下面滋戳。是一個(gè)抽象類塞帐,有很多個(gè)子類實(shí)現(xiàn),例如:ByteBuffer、CharBuffer、FloatBuffer等等,功能還是挺豐富的灯荧。
屬性:
- capacity:包含元素的數(shù)量。
- limit:不可以被讀或者被寫的位置盐杂。
- position:當(dāng)前讀或者寫位置的下一個(gè)位置逗载。
- mark:一般和reset一起使用哆窿,不能大于position。
- 排序:mark <= position <=limit <= capacity
方法:
- clear():讓buffer做好讀或者put數(shù)據(jù)的準(zhǔn)備厉斟,設(shè)置limit為capacity挚躯,position為0。
- flip():讓buffer做好寫或者get數(shù)據(jù)的準(zhǔn)備擦秽,設(shè)置limit為position码荔,position為0。
- rewind():讓buffer重新讀取一遍數(shù)據(jù)感挥。
- slice():創(chuàng)建當(dāng)前buffer的一個(gè)子序列缩搅,limit、position保持不變触幼。
- duplicate():創(chuàng)建當(dāng)前buffer的一個(gè)淺復(fù)制硼瓣,limit、position保持不變置谦。
好處:
- 減少實(shí)際的物理讀寫次數(shù)堂鲤。
- 減少動(dòng)態(tài)分配、回收內(nèi)存的次數(shù)媒峡,可以重復(fù)利用瘟栖。
ByteBuffer:抽象類、繼承Buffer谅阿,提供多個(gè)靜態(tài)工廠方法獲取實(shí)例慢宗。
- allocateDirect(int capacity):
不使用JVM堆棧而是通過操作系統(tǒng)來創(chuàng)建內(nèi)存塊用作緩沖區(qū),開銷很大奔穿,慎用。 - allocate(int capacity):
堆空間中分配一個(gè)容量大小為capacity的byte數(shù)組作為緩沖區(qū)的byte數(shù)據(jù)存儲(chǔ)器敏晤。 - wrap(byte[] array,int offset, int length):
可以指定偏移量和長(zhǎng)隊(duì)贱田。 - wrap(byte[] array):
這個(gè)緩沖區(qū)的數(shù)據(jù)會(huì)存放在byte數(shù)組中,bytes數(shù)組或buff緩沖區(qū)任何一方中數(shù)據(jù)的改動(dòng)都會(huì)影響另一方嘴脾。
總結(jié):
廣度和深度...