
java新IO之Buffer
1、什么是java新IO
在jdk1.4之后呢,為了提高IO操作的性能,提供了一個(gè)新的開(kāi)發(fā)包,NIO,此
包定義在java.nio.*中。
在java中,已有的IO操作大部分都屬于阻塞的操作,例如,鍵盤(pán)輸入數(shù)據(jù),
必須一直等待用戶(hù)輸入數(shù)據(jù),否則程序不能繼續(xù)執(zhí)行。另外,還有socket程
序中服務(wù)器必須通過(guò)accept()方法等待用戶(hù)連接,這就造成了大量的系統(tǒng)
資源的浪費(fèi)。所以呢在jdk1.4之后引入了新IO,在整個(gè)新IO的操作基本上都
是使用緩沖區(qū)來(lái)完成的。
2、Buffer-->緩沖區(qū)
在基本io操作中,所有的操作都是以流的形式完成的,但是在新IO中所有的
操作都是要使用到Buffer,所有的讀寫(xiě)操作都是通過(guò)緩沖區(qū)完成的。
2、1 Buffer:
是一個(gè)線性的,有序的數(shù)據(jù)集,只能容納某種特定類(lèi)型數(shù)據(jù)。
在jdk api 1.6中是這樣定義的:
public abstract class Bufferextends Object一個(gè)用于特定基本類(lèi)型數(shù)據(jù)
的容器。
緩沖區(qū)是特定基本類(lèi)型元素的線性有限序列。除內(nèi)容外,緩沖區(qū)的基本屬性
還包括容量、限制和位置:
緩沖區(qū)的容量 是它所包含的元素的數(shù)量。緩沖區(qū)的容量不能為負(fù)并且不能更
改。
緩沖區(qū)的限制 是第一個(gè)不應(yīng)該讀取或?qū)懭氲脑氐乃饕>彌_區(qū)的限制不能
為負(fù),并且不能大于其容量。
緩沖區(qū)的位置 是下一個(gè)要讀取或?qū)懭氲脑氐乃饕>彌_區(qū)的位置不能為負(fù)
,并且不能大于其限制。
對(duì)于每個(gè)非 boolean 基本類(lèi)型,此類(lèi)都有一個(gè)子類(lèi)與之對(duì)應(yīng)。
2、2 Buffer的清除、反轉(zhuǎn)和重繞
除了訪問(wèn)位置、限制、容量值的方法以及做標(biāo)記和重置的方法外,此類(lèi)還定
義了以下可對(duì)緩沖區(qū)進(jìn)行的操作:
clear() 使緩沖區(qū)為一系列新的通道讀取或相對(duì)放置 操作做好準(zhǔn)備:它將限
制設(shè)置為容量大小,將位置設(shè)置為 0。
flip() 使緩沖區(qū)為一系列新的通道寫(xiě)入或相對(duì)獲取 操作做好準(zhǔn)備:它將限
制設(shè)置為當(dāng)前位置,然后將位置設(shè)置為 0。
rewind() 使緩沖區(qū)為重新讀取已包含的數(shù)據(jù)做好準(zhǔn)備:它使限制保持不變,
將位置設(shè)置為 0
2、3 線程安全
多個(gè)當(dāng)前線程使用緩沖區(qū)是不安全的。如果一個(gè)緩沖區(qū)由不止一個(gè)線程使用
,則應(yīng)該通過(guò)適當(dāng)?shù)耐絹?lái)控制對(duì)該緩沖區(qū)的訪問(wèn)。
2、4 調(diào)用鏈
指定此類(lèi)中的方法返回調(diào)用它們的緩沖區(qū)(否則它們不會(huì)返回任何值)。此
操作允許將方法調(diào)用組成一個(gè)鏈;例如,語(yǔ)句序列
b.flip();
b.position(23);
b.limit(42);可以由以下更緊湊的一個(gè)語(yǔ)句代替
b.flip().position(23).limit(42);
3、Buffer中的方法
3、1 position方法
@ :public final int position()返回此緩沖區(qū)的位置。
@ :public final Buffer position(int newPosition)
設(shè)置此緩沖區(qū)的位置。如果標(biāo)記已定義且大于新的位置,則丟棄該標(biāo)記。
3、2 limit方法
@ :public final int limit()返回此緩沖區(qū)的限制。
@ :public final Buffer limit(int newLimit)
設(shè)置此緩沖區(qū)的限制。如果位置大于新的限制,則將它設(shè)置為新限制。如果
標(biāo)記已定義且大于新限制,則丟棄該標(biāo)記。
3、3 capacity 容量
public final int capacity() 返回此緩沖區(qū)的容量。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
