Java NIO API詳解

Java NIO API詳解

ID:42770115

大?。?59.50 KB

頁數(shù):14頁

時間:2019-09-22

Java NIO API詳解_第1頁
Java NIO API詳解_第2頁
Java NIO API詳解_第3頁
Java NIO API詳解_第4頁
Java NIO API詳解_第5頁
資源描述:

《Java NIO API詳解》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。

1、JavaNIOAPI詳解在JDK1.4以前,Java的IO操作集中在java.io這個包中,是基于流的同步(blocking)API。對于大多數(shù)應用來說,這樣的API使用很方便,然而,一些對性能要求較高的應用,尤其是服務端應用,往往需要一個更為有效的方式來處理IO。從JDK1.4起,NIOAPI作為一個基于緩沖區(qū),并能提供異步(non-blocking)IO操作的API被引入。本文對其進行深入的介紹。NIOAPI主要集中在java.nio和它的subpackages中:java.nio定義了Buffer及其數(shù)據(jù)類型相關的子類。其中被java.nio.channels中的類用來進行IO操作的

2、ByteBuffer的作用非常重要。java.nio.channels定義了一系列處理IO的Channel接口以及這些接口在文件系統(tǒng)和網(wǎng)絡通訊上的實現(xiàn)。通過Selector這個類,還提供了進行異步IO操作的辦法。這個包可以說是NIOAPI的核心。java.nio.channels.spi定義了可用來實現(xiàn)channel和selectorAPI的抽象類。java.nio.charset定義了處理字符編碼和解碼的類。java.nio.charset.spi定義了可用來實現(xiàn)charsetAPI的抽象類。java.nio.channels.spi和java.nio.charset.spi這兩個包主要

3、被用來對現(xiàn)有NIOAPI進行擴展,在實際的使用中,我們一般只和另外的3個包打交道。下面將對這3個包一一介紹。Packagejava.nio這個包主要定義了Buffer及其子類。Buffer定義了一個線性存放primitivetype數(shù)據(jù)的容器接口。對于除boolean以外的其他primitivetype,都有一個相應的Buffer子類,ByteBuffer是其中最重要的一個子類。下面這張UML類圖描述了java.nio中的類的關系:Buffer定義了一個可以線性存放primitivetype數(shù)據(jù)的容器接口。Buffer主要包含了與類型(byte,char…)無關的功能。值得注意的是Buff

4、er及其子類都不是線程安全的。每個Buffer都有以下的屬性:capacity這個Buffer最多能放多少數(shù)據(jù)。capacity一般在buffer被創(chuàng)建的時候指定。limit在Buffer上進行的讀寫操作都不能越過這個下標。當寫數(shù)據(jù)到buffer中時,limit一般和capacity相等,當讀數(shù)據(jù)時,limit代表buffer中有效數(shù)據(jù)的長度。position讀/寫操作的當前下標。當使用buffer的相對位置進行讀/寫操作時,讀/寫會從這個下標進行,并在操作完成后,buffer會更新下標的值。mark一個臨時存放的位置下標。調用mark()會將mark設為當前的position的值,以后調

5、用reset()會將position屬性設置為mark的值。mark的值總是小于等于position的值,如果將position的值設的比mark小,當前的mark值會被拋棄掉。這些屬性總是滿足以下條件:0<=mark<=position<=limit<=capacitylimit和position的值除了通過limit()和position()函數(shù)來設置,也可以通過下面這些函數(shù)來改變:Bufferclear()把position設為0,把limit設為capacity,一般在把數(shù)據(jù)寫入Buffer前調用。Bufferflip()把limit設為當前position,把position設為

6、0,一般在從Buffer讀出數(shù)據(jù)前調用。Bufferrewind()把position設為0,limit不變,一般在把數(shù)據(jù)重寫入Buffer前調用。Buffer對象有可能是只讀的,這時,任何對該對象的寫操作都會觸發(fā)一個ReadOnlyBufferException。isReadOnly()方法可以用來判斷一個Buffer是否只讀。ByteBuffer在Buffer的子類中,ByteBuffer是一個地位較為特殊的類,因為在java.io.channels中定義的各種channel的IO操作基本上都是圍繞ByteBuffer展開的。ByteBuffer定義了4個static方法來做創(chuàng)建工作:

7、ByteBufferallocate(intcapacity)創(chuàng)建一個指定capacity的ByteBuffer。ByteBufferallocateDirect(intcapacity)創(chuàng)建一個direct的ByteBuffer,這樣的ByteBuffer在參與IO操作時性能會更好(很有可能是在底層的實現(xiàn)使用了DMA技術),相應的,創(chuàng)建和回收direct的ByteBuffer的代價也會高一些。isDirect()方法可

當前文檔最多預覽五頁,下載文檔查看全文

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

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