java中的緩沖區(qū)(直接緩沖區(qū)、非直接緩沖區(qū)等)

java中的緩沖區(qū)(直接緩沖區(qū)、非直接緩沖區(qū)等)

ID:8975166

大?。?0.34 KB

頁數(shù):5頁

時(shí)間:2018-04-13

java中的緩沖區(qū)(直接緩沖區(qū)、非直接緩沖區(qū)等)_第1頁
java中的緩沖區(qū)(直接緩沖區(qū)、非直接緩沖區(qū)等)_第2頁
java中的緩沖區(qū)(直接緩沖區(qū)、非直接緩沖區(qū)等)_第3頁
java中的緩沖區(qū)(直接緩沖區(qū)、非直接緩沖區(qū)等)_第4頁
java中的緩沖區(qū)(直接緩沖區(qū)、非直接緩沖區(qū)等)_第5頁
資源描述:

《java中的緩沖區(qū)(直接緩沖區(qū)、非直接緩沖區(qū)等)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、·Java中的緩沖區(qū)(直接緩沖區(qū)、非直接緩沖區(qū)等)如果將同步I/O方式下的數(shù)據(jù)傳輸比做數(shù)據(jù)傳輸?shù)牧阈欠绞?這里的零星是指在數(shù)據(jù)傳輸?shù)倪^程中是以零星的字節(jié)方式進(jìn)行的),那么就可以將非阻塞I/O方式下的數(shù)據(jù)傳輸比做數(shù)據(jù)傳輸?shù)募b箱方式(在字節(jié)和低層數(shù)據(jù)傳輸之間,多了一層緩沖區(qū),因此,可以將緩沖區(qū)看做是裝載字節(jié)的集裝箱)?! ∪绻麑⑼絀/O方式下的數(shù)據(jù)傳輸比做數(shù)據(jù)傳輸?shù)牧阈欠绞?這里的零星是指在數(shù)據(jù)傳輸?shù)倪^程中是以零星的字節(jié)方式進(jìn)行的),那么就可以將非阻塞I/O方式下的數(shù)據(jù)傳輸比做數(shù)據(jù)傳輸?shù)募b箱方式(在字節(jié)和低層數(shù)據(jù)傳輸之間,多了

2、一層緩沖區(qū),因此,可以將緩沖區(qū)看做是裝載字節(jié)的集裝箱)。大家可以想象,如果我們要運(yùn)送比較少的貨物,用集裝箱好象有點(diǎn)不太合算,而如果要運(yùn)送上百噸的貨物,用集裝箱來運(yùn)送的成本會(huì)更低。在數(shù)據(jù)傳輸過程中也是一樣,如果數(shù)據(jù)量很小時(shí),使用同步I/O方式會(huì)更適合,如果數(shù)據(jù)量很大時(shí)(一般以G為單位),使用非阻塞I/O方式的效率會(huì)更高。因此,從理論上說,數(shù)據(jù)量越大,使用非阻塞I/O方式的單位成本就會(huì)越低。產(chǎn)生這種結(jié)果的原因和緩沖區(qū)的一些特性有著直接的關(guān)系。在本節(jié)中,將對緩沖區(qū)的一些主要特性進(jìn)行講解,使讀者可以充分理解緩沖區(qū)的概念,并能通過緩沖區(qū)來

3、提高程序的執(zhí)行效率。  創(chuàng)建緩沖區(qū)  Java提供了七個(gè)基本的緩沖區(qū),分別由七個(gè)類來管理,它們都可以在java.nio包中找到。這七個(gè)類如下所示: ??ByteBuffer?  ShortBuffer?  IntBuffer?  CharBuffer?  FloatBuffer?  DoubleBuffer?  LongBuffer?  st1":*{behavior:url(#ieooui)?}  這七個(gè)類中的方法類似,只是它們的返回值或參數(shù)和相應(yīng)的簡單類型相對應(yīng),如ByteBuffer類的get方法返回了byte類型的數(shù)據(jù),

4、而put方法需要一個(gè)byte類型的參數(shù)。在CharBuffer類中的get和put方法返回和傳遞的數(shù)據(jù)類型就是char。這七個(gè)類都沒有public構(gòu)造方法,因此,它們不能通過new來創(chuàng)建相應(yīng)的對象實(shí)例。這些類都可以通過兩種方式來創(chuàng)建相應(yīng)的對象實(shí)例。  1.通過靜態(tài)方法allocate來創(chuàng)建緩沖區(qū)?! ∵@七類都有一個(gè)靜態(tài)的allocate方法,通過這個(gè)方法可以創(chuàng)建有最大容量限制的緩沖區(qū)對象。allocate的定義如下:  ByteBuffer類中的allocate方法: public?static?ByteBuffer?alloc

5、ate(int?capacity)  IntBuffer類中的allocate方法: public?static?IntBuffer?allocate(int?capacity)  其他五個(gè)緩沖區(qū)類中的allocate方法定義和上面的定義類似,只是返回值的類型是相應(yīng)的緩沖區(qū)類?! llocate方法有一個(gè)參數(shù)capacity,用來指定緩沖區(qū)容量的最大值。capacity的不能小于0,否則會(huì)拋出一個(gè)IllegalArgumentException異常。使用allocate來創(chuàng)建緩沖區(qū),并不是一下子就分配給緩沖區(qū)capacity大

6、小的空間,而是根據(jù)緩沖區(qū)中存儲(chǔ)數(shù)據(jù)的情況來動(dòng)態(tài)分配緩沖區(qū)的大小(實(shí)際上,在低層Java采用了數(shù)據(jù)結(jié)構(gòu)中的堆來管理緩沖區(qū)的大小),因此,這個(gè)capacity可以是一個(gè)很大的值,如1024*1024(1M)。allocate的使用方法如下: ByteBuffer?byteBuffer?=?ByteBuffer.allocate(1024);?  IntBuffer?intBuffer?=?IntBuffer.allocate(1024);  在使用allocate創(chuàng)建緩沖區(qū)時(shí)應(yīng)用注意,capacity的含義隨著緩沖區(qū)的不同而不同。如

7、創(chuàng)建字節(jié)緩沖區(qū)時(shí),capacity指的是字節(jié)數(shù)。而在創(chuàng)建整型(int)緩沖區(qū)時(shí),capacity指的是int型值的數(shù)目,如果轉(zhuǎn)換成字?jǐn)?shù),capacity的值應(yīng)該乘4。如上面代碼中的intBuffer緩沖區(qū)最大可容納的字節(jié)數(shù)是1024*4=4096個(gè)?! ?.通過靜態(tài)方法wrap來創(chuàng)建緩沖區(qū)?! ∈褂胊llocate方法可以創(chuàng)建一個(gè)空的緩沖區(qū)。而wrap方法可以利用已經(jīng)存在的數(shù)據(jù)來創(chuàng)建緩沖區(qū)。wrap方法可以將數(shù)組直接轉(zhuǎn)換成相應(yīng)類型的緩沖區(qū)。wrap方法有兩種重載形式,它們的定義如下:  ByteBuffer類中的wrap方法: 

8、??public?static?ByteBuffer?wrap(byte[]?array)?  public?static?ByteBuffer?wrap(byte[]?array,?int?offset,?int?length)  IntBuffer類中的wr

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。