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