原地址:http://tutorials.jenkov.com/java-nio/overview.html
主要是翻譯這個帥老外的nio系列领曼,中間加了一點自己的理解,盡量讀起來好懂一些蛮穿,不對之處請指正
java nio由三個核心的組件構(gòu)成:
? ? Channels庶骄、Buffers、Selector
在nio中所有的io操作都起始于Channel践磅,Channel有點像stream這個概念单刁。可以從Channel讀取數(shù)據(jù)到Buffer,也可以從Buffer中讀取數(shù)據(jù)到Channel中羔飞。下面是Channel和Buffer的關(guān)系圖解:
Buffer和Channel
各自有一些實現(xiàn)的類肺樟,下面是Channel的幾個主要的實現(xiàn)類:
? ? ? ? ?FileChannel、DatagramChannel逻淌、SocketChanel么伯、ServerSocketChanel
這些channels覆蓋了UDP和TCP協(xié)議的網(wǎng)絡(luò)IO和文件IO。
Buffer也有一些主要的實現(xiàn)類:
? ? ? ? ?ByteBuffer卡儒、CharBuffer田柔、DoubleBuffer、FloatBuffer骨望、IntBuffer硬爆、LongBuffer、ShortBuffer
從名字中可以看出來都是一些基本類型的buffer擎鸠,還有一個MappedByteBuffer缀磕,后面會涉及。
Selectors
一個selector允許一個線程處理多個channel劣光。下面是一個selector的圖解袜蚕,展示了一個selector同時處理三個channel
要想使用selector,必須把channel注冊到selector上面赎线,然后調(diào)用它的select()方法.這個方法是阻塞的廷没,一直等到其中的一個已注冊到上面的channel準(zhǔn)備好一個event糊饱。一旦這個方法返回了垂寥,這個線程就可以處理這些event。這些event包括連接另锋、數(shù)據(jù)傳輸?shù)鹊取?/p>