java nio详解,Java NIO API详解
Java NIO API詳解
在JDK
1.4以前,Java的IO操作集中在java.io這個(gè)包中,是基于流的阻塞(blocking)API。對(duì)于大多數(shù)應(yīng)用來(lái)說(shuō),這樣的API使用很方
便,然而,一些對(duì)性能要求較高的應(yīng)用,尤其是服務(wù)端應(yīng)用,往往需要一個(gè)更為有效的方式來(lái)處理IO。從JDK 1.4起,NIO
API作為一個(gè)基于緩沖區(qū),并能提供非阻塞(non-blocking)IO操作的API被引入。本文對(duì)其進(jìn)行深入的介紹。
NIO API主要集中在java.nio和它的subpackages中:
java.nio
定義了Buffer及其數(shù)據(jù)類型相關(guān)的子類。其中被java.nio.channels中的類用來(lái)進(jìn)行IO操作的ByteBuffer的作用非常重要。
java.nio.channels
定義了一系列處理IO的Channel接口以及這些接口在文件系統(tǒng)和網(wǎng)絡(luò)通訊上的實(shí)現(xiàn)。通過(guò)Selector這個(gè)類,還提供了進(jìn)行非阻塞IO操作的辦法。這個(gè)包可以說(shuō)是NIO API的核心。
java.nio.channels.spi
定義了可用來(lái)實(shí)現(xiàn)channel和selector API的抽象類。
java.nio.charset
定義了處理字符編碼和解碼的類。
java.nio.charset.spi
定義了可用來(lái)實(shí)現(xiàn)charset API的抽象類。
java.nio.channels.spi和java.nio.charset.spi這兩個(gè)包主要被用來(lái)對(duì)現(xiàn)有NIO API進(jìn)行擴(kuò)展,在實(shí)際的使用中,我們一般只和另外的3個(gè)包打交道。下面將對(duì)這3個(gè)包一一介紹。
Package java.nio
這個(gè)包主要定義了Buffer及其子類。Buffer定義了一個(gè)線性存放primitive type數(shù)據(jù)的容器接口。對(duì)于除boolean以外的其他primitive type,都有一個(gè)相應(yīng)的Buffer子類,ByteBuffer是其中最重要的一個(gè)子類。
下面這張UML類圖描述了java.nio中的類的關(guān)系:
Buffer
定義了一個(gè)可以線性存放primitive type數(shù)據(jù)的容器接口。Buffer主要包含了與類型(byte, char…)無(wú)關(guān)的功能。值得注意的是Buffer及其子類都不是線程安全的。
每個(gè)Buffer都有以下的屬性:
capacity
這個(gè)Buffer最多能放多少數(shù)據(jù)。capacity一般在buffer被創(chuàng)建的時(shí)候指定。
limit
在Buffer上進(jìn)行的讀寫(xiě)操作都不能越過(guò)這個(gè)下標(biāo)。當(dāng)寫(xiě)數(shù)據(jù)到buffer中時(shí),limit一般和capacity相等,當(dāng)讀數(shù)據(jù)時(shí),limit代表buffer中有效數(shù)據(jù)的長(zhǎng)度。
position
讀/寫(xiě)操作的當(dāng)前下標(biāo)。當(dāng)使用buffer的相對(duì)位置進(jìn)行讀/寫(xiě)操作時(shí),讀/寫(xiě)會(huì)從這個(gè)下標(biāo)進(jìn)行,并在操作完成后,buffer會(huì)更新下標(biāo)的值。
mark
一個(gè)臨時(shí)存放的位置下標(biāo)。調(diào)用mark()會(huì)將mark設(shè)為當(dāng)前的pos
總結(jié)
以上是生活随笔為你收集整理的java nio详解,Java NIO API详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php ttf 字体 url,windo
- 下一篇: java小票_Java编程打印购物小票实