以前寫過一篇Java Socket的用法,不過覺得介紹的不夠細致也不夠全面,因此今天想在細談一下Java NIO,也算是對上一篇博客的補充吧。在以前的博客中提到Java NIO的三個核心部分Buffers、Channels、Selectors,這里不再贅述三者之間的關(guān)系,接下來我們重點看看這三個核心部分。
Buffer
該區(qū)域本質(zhì)是一塊可以讀寫的數(shù)據(jù)的內(nèi)存區(qū),這組內(nèi)存區(qū)被包裝成NIO Buffer對象,并提供了一組方法,方便訪問該塊內(nèi)存。為了更清楚的理解Buffer的工作原理,需要熟悉它的三個屬性capacity、position、limit。capacity表示緩沖區(qū)大小。而position和limit的含義取決于Buffer處在讀模式還是寫模式下。在讀模式下,position表示開始讀的位置,limit表示最后能讀的數(shù)據(jù)位置。在寫模式下,position表示當前數(shù)據(jù)需要寫入的位置,最大值為capacity-1。當由寫模式切換到讀模式時,position=0,limit=position。
抽象類Buffer具體實現(xiàn)類有ByteBuffer、MappedByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer。接下來我們以ByteBuffer為例來了解一下Buffer的具體用法。
View Code