Java的NIO之通道channel詳解
通道(channel)
通道(channel):由java.nio.channels 包定義的。
Channel 表示IO源與目標(biāo)打開(kāi)的連接。
Channel類(lèi)類(lèi)似于傳統(tǒng)的“流”。只不過(guò)Channel本身不能直接訪問(wèn)數(shù)據(jù),Channel只能與Buffer進(jìn)行交互。
jvm數(shù)據(jù)傳輸?shù)陌l(fā)展
第一階段:由CPU直接處理和管理IO接口并進(jìn)行數(shù)據(jù)傳輸。
第二階段:引入寄存器DMA(流的概念引入),在需要使用IO操作的時(shí)候,由寄存器DMA向CPU申請(qǐng),然后再由寄存器統(tǒng)一管理IO接口,實(shí)現(xiàn)數(shù)據(jù)傳輸。
第三階段:寄存器DMA換成通道Channel,通道獨(dú)立開(kāi)來(lái)不由CPU管,也不需要申請(qǐng)權(quán)限,只有由其對(duì)IO接口進(jìn)行處理和管理,然后實(shí)現(xiàn)數(shù)據(jù)傳輸。
Java為Channel接口提供的最主要實(shí)現(xiàn)類(lèi)如下:
- FileChannel : 用于讀取、寫(xiě)入、映射和操作文件的通道
- DatagramChannel : 通過(guò) UDP 讀寫(xiě)網(wǎng)絡(luò)中的數(shù)據(jù)通道。
- SocketChannel : 通過(guò) TCP 讀寫(xiě)網(wǎng)絡(luò)中的數(shù)據(jù)。
- ServerSocketChannel : 可以監(jiān)聽(tīng)新進(jìn)來(lái)的 TCP 連接,對(duì)每一個(gè)新來(lái)進(jìn)來(lái)的連接都會(huì)創(chuàng)建一個(gè) SocketChannel。
獲取通道
獲取通道的一種方式是對(duì)支持通道的對(duì)象調(diào)用getChannel() 方法。支持通道的類(lèi)如下:
- FileIputStream
- FileOutputStream
- RandomAccessFile
- DatagramSocket
- Socket
- ServerSocket 獲取通道的其他方式是使用 Files 類(lèi)的靜態(tài)方法 newByteChannel()獲取字節(jié)通道。或者通過(guò)通道的靜態(tài)方法open() 打開(kāi)并返回指定通道。
FileChannel的常用方法
到此這篇關(guān)于Java的NIO之通道channel詳解的文章就介紹到這了,更多相關(guān)Java通道channel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java基于C/S模式實(shí)現(xiàn)聊天程序(服務(wù)器)
這篇文章主要為大家詳細(xì)介紹了java基于C/S模式實(shí)現(xiàn)聊天程序的服務(wù)器篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01java實(shí)現(xiàn)文件壓縮成zip的工具類(lèi)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)文件壓縮成zip的工具類(lèi),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07詳解Java LinkedHashMap與HashMap的使用
這篇文章主要通過(guò)幾個(gè)示例為大家詳細(xì)介紹了Java中LinkedHashMap與HashMap的常見(jiàn)使用和概述,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-10-10Java實(shí)現(xiàn)五子棋的基礎(chǔ)方法
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)五子棋的基礎(chǔ)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09深度剖析java動(dòng)態(tài)靜態(tài)代理原理源碼
這篇文章主要介紹了深度剖析java動(dòng)態(tài)靜態(tài)代理原理源碼,關(guān)于Java中的動(dòng)態(tài)代理,我們首先需要了解的是一種常用的設(shè)計(jì)模式--代理模式,而對(duì)于代理,根據(jù)創(chuàng)建代理類(lèi)的時(shí)間點(diǎn),又可以分為靜態(tài)代理和動(dòng)態(tài)代理。,需要的朋友可以參考下2019-06-06Java利用redis實(shí)現(xiàn)防止接口重復(fù)提交
本文主要為大家詳細(xì)介紹了Java如何利用redis實(shí)現(xiàn)防止接口重復(fù)提交,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-11-11Java使用poi導(dǎo)出ppt文件的實(shí)現(xiàn)代碼
Apache POI 是用Java編寫(xiě)的免費(fèi)開(kāi)源的跨平臺(tái)的 Java API,Apache POI提供API給Java對(duì)Microsoft Office格式檔案讀和寫(xiě)的功能。本文給大家介紹Java使用poi導(dǎo)出ppt文件的實(shí)現(xiàn)代碼,需要的朋友參考下吧2021-06-06java實(shí)現(xiàn)學(xué)生教師管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生教師管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10