日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺談Java中IO和NIO的本質和區別

瀏覽:163日期:2022-08-11 13:35:08
目錄IO的本質DMA和虛擬地址空間IO的分類IO和NIO的區別IO的本質

IO的作用就是從外部系統讀取數據到java程序中,或者把java程序中輸出的數據寫回到外部系統。這里的外部系統可能是磁盤,網絡流等等。

因為對所有的外部數據的處理都是由操作系統內核來實現的,對于java應用程序來說,只是調用操作系統中相應的接口方法,從而和外部數據進行交互。

所有IO的本質就是對Buffer的處理,我們把數據放入Buffer供系統寫入外部數據,或者從系統Buffer中讀取從外部系統中讀取的數據。如下圖所示:

淺談Java中IO和NIO的本質和區別

用戶空間也就是我們自己的java程序有一個Buffer,系統空間也有一個buffer。所以會出現系統空間緩存數據的情況,這種情況下系統空間將會直接返回Buffer中的數據,提升讀取速度。

DMA和虛擬地址空間

在繼續講解之前,我們先講解兩個操作系統中的基本概念,方便后面我們對IO的理解。

現代操作系統都有一個叫做DMA(Direct memory access)的組件。這個組件是做什么的呢?

一般來說對內存的讀寫都是要交給CPU來完成的,在沒有DMA的情況下,如果程序進行IO操作,那么所有的CPU時間都會被占用,CPU沒法去響應其他的任務,只能等待IO執行完成。這在現代應用程序中是無法想象的。

如果使用DMA,則CPU可以把IO操作轉交給其他的操作系統組件,比如數據管理器來操作,只有當數據管理器操作完畢之后,才會通知CPU該IO操作完成。現代操作系統基本上都實現了DMA。

虛擬地址空間也叫做(Virtual address space),為了不同程序的互相隔離和保證程序中地址的確定性,現代計算機系統引入了虛擬地址空間的概念。簡單點講可以看做是跟實際物理地址的映射,通過使用分段或者分頁的技術,將實際的物理地址映射到虛擬地址空間。

淺談Java中IO和NIO的本質和區別

對于上面的IO的基本流程圖中,我們可以將系統空間的buffer和用戶空間的buffer同時映射到虛擬地址空間的同一個地方。這樣就省略了從系統空間拷貝到用戶空間的步驟。速度會更快。

同時為了解決虛擬空間比物理內存空間大的問題,現代計算機技術一般都是用了分頁技術。

分頁技術就是將虛擬空間分為很多個page,只有在需要用到的時候才為該page分配到物理內存的映射,這樣物理內存實際上可以看做虛擬空間地址的緩存。

虛擬空間地址分頁對IO的影響就在于,IO的操作也是基于page來的。

比較常用的page大小有:1,024, 2,048, 和 4,096 bytes。

IO的分類

IO可以分為File/Block IO和Stream I/O兩類。

對于File/Block IO來說,數據是存儲在disk中,而disk是由filesystem來進行管理的。我們可以通過filesystem來定義file的名字,路徑,文件屬性等內容。

filesystem通過把數據劃分成為一個個的data blocks來進行管理。有些blocks存儲著文件的元數據,有些block存儲著真正的數據。

最后filesystem在處理數據的過程中,也進行了分頁。filesystem的分頁大小可以跟內存分頁的大小一致,或者是它的倍數,比如 2,048 或者 8,192 bytes等。

并不是所有的數據都是以block的形式存在的,我們還有一類IO叫做stream IO。

stream IO就像是管道流,里面的數據是序列被消費的。

IO和NIO的區別

java1.0中的IO是流式IO,它只能一個字節一個字節的處理數據,所以IO也叫做Stream IO。

而NIO是為了提升IO的效率而生的,它是以Block的方式來讀取數據的。

Stream IO中,input輸入一個字節,output就輸出一個字節,因為是Stream,所以可以加上過濾器或者過濾器鏈,可以想想一下web框架中的filter chain。在Stream IO中,數據只能處理一次,你不能在Stream中回退數據。

在Block IO中,數據是以block的形式來被處理的,因此其處理速度要比Stream IO快,同時可以回退處理數據。但是你需要自己處理buffer,所以復雜程度要比Stream IO高。

一般來說Stream IO是阻塞型IO,當線程進行讀或者寫操作的時候,線程會被阻塞。

而NIO一般來說是非阻塞的,也就是說在進行讀或者寫的過程中可以去做其他的操作,而讀或者寫操作執行完畢之后會通知NIO操作的完成。

在IO中,主要分為DataOutPut和DataInput,分別對應IO的out和in。

DataOutPut有三大類,分別是Writer,OutputStream和ObjectOutput。

看下他們中的繼承關系:

淺談Java中IO和NIO的本質和區別

淺談Java中IO和NIO的本質和區別

DataInput也有三大類,分別是ObjectInput,InputStream和Reader。

看看他們的繼承關系:

淺談Java中IO和NIO的本質和區別

淺談Java中IO和NIO的本質和區別

ObjectOutput和ObjectInput類比較少,這里就不列出來了。

統計一下大概20個類左右,搞清楚這20個類的用處,恭喜你java IO你就懂了!

對于NIO來說比較復雜一點,首先,為了處理block的信息,需要將數據讀取到buffer中,所以在NIO中Buffer是一個非常中要的概念,我們看下NIO中的Buffer:

淺談Java中IO和NIO的本質和區別

從上圖我們可以看到NIO中為我們準備了各種各樣的buffer類型使用。

另外一個非常重要的概念是channel,channel是NIO獲取數據的通道:

淺談Java中IO和NIO的本質和區別

NIO需要掌握的類的個數比IO要稍稍多一點,畢竟NIO要復雜一點。

以上就是淺談Java中IO和NIO的本質和區別的詳細內容,更多關于Java中IO和NIO的本質和區別的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品自拍区| 欧美亚洲tv| 麻豆精品国产91久久久久久| av在线最新| 国产不卡人人| 日韩欧美精品一区二区综合视频| 久久久久久久久99精品大| 色乱码一区二区三区网站| 免费亚洲一区| 国产一区精品福利| 正在播放日韩精品| 日韩精品一区二区三区免费观看| 九色porny丨国产首页在线| 91欧美国产| 少妇精品导航| 亚洲国产一区二区三区在线播放| 五月天久久久| 亚洲欧洲一区二区天堂久久| 亚洲精品在线观看91| 国产手机视频一区二区| 久久不射中文字幕| 亚洲精品一区二区在线看| 午夜在线播放视频欧美| 亚洲天堂日韩在线| 日本午夜精品视频在线观看| 国产欧美日韩免费观看| 狠狠久久伊人中文字幕| 免费看av不卡| 欧美福利一区| 日韩中文字幕区一区有砖一区| 7m精品国产导航在线| 免费亚洲一区| 国产亚洲一区二区手机在线观看 | 青草国产精品| 国产精品久一| 国产suv精品一区二区四区视频| 精品中国亚洲| 久久精品国产68国产精品亚洲| 欧美日韩激情| 五月激激激综合网色播 | 老牛影视一区二区三区| 日韩精品福利一区二区三区| 久久99精品久久久野外观看| 三上悠亚国产精品一区二区三区| 中文字幕系列一区| 老司机久久99久久精品播放免费| 日本v片在线高清不卡在线观看| 久久成人高清| 亚洲视频综合| 日韩国产精品久久久| 成人国产精品久久| 亚洲一区成人| 国产精品白丝av嫩草影院| 三级小说欧洲区亚洲区| 影音先锋久久精品| 国产中文字幕一区二区三区| 午夜久久免费观看| 欧美一区影院| 91精品国产乱码久久久久久久| 国产一区白浆| 里番精品3d一二三区| 亚洲国产不卡| 国产劲爆久久| 免费黄色成人| 久久国内精品| 丝袜av一区| 国产亚洲精品美女久久| 成人日韩在线观看| 欧美欧美黄在线二区| 少妇精品导航| 国产美女视频一区二区| 香蕉精品久久| 国产精品v日韩精品v欧美精品网站| 国产91精品对白在线播放| 在线观看视频免费一区二区三区| 国产美女高潮在线| 婷婷视频一区二区三区| av在线日韩| 国产激情一区| 久久xxxx| 久久久亚洲一区| 国产精品伊人| 性一交一乱一区二区洋洋av| 成人在线视频区| 日韩福利视频一区| 久久精品福利| 亚洲涩涩在线| 亚洲精品乱码久久久久久蜜桃麻豆| 精品视频国内| 成人台湾亚洲精品一区二区| 综合亚洲色图| 999国产精品| 麻豆一区在线| 欧美亚洲一区二区三区| 日韩午夜精品| 中文字幕系列一区| 精品视频亚洲| 国产日韩欧美中文在线| 亚洲欧美网站| 欧美日韩国产一区二区三区不卡| 国产精品高颜值在线观看| 欧美伊人影院| 日韩精品一区二区三区中文字幕| 国产一区二区精品| 国产精品久久久久av电视剧| 国产精品美女午夜爽爽| 玖玖精品视频| 亚洲欧美日韩在线观看a三区| 蜜桃成人av| 麻豆国产91在线播放| 国产亚洲字幕| 欧美日韩一区二区三区四区在线观看 | 国产精品99在线观看| 国产精品亚洲四区在线观看 | 亚洲综合二区| 99亚洲视频| 亚洲一卡久久| 国产视频一区欧美| 99视频精品全部免费在线视频| 精品视频99| 精品一级视频| 国产精品视频一区二区三区| 91精品国产自产观看在线| 99国产精品久久久久久久成人热| 国产精品久久久久久久免费观看| 欧美片第1页综合| 亚洲精品成人一区| 99在线精品视频在线观看| 天堂日韩电影| 精品一区二区三区免费看| 欧美亚洲一区二区三区| 亚洲精品韩国| 亚洲在线观看| 欧美一级鲁丝片| 日韩久久视频| 福利视频一区| 免费在线亚洲欧美| 91嫩草精品| 日韩视频一二区| 99精品网站| 99综合视频| 国产一区成人| 亚洲免费一区二区| 午夜免费一区| 日韩不卡在线| 国产极品一区| 日韩在线中文| 桃色一区二区| 日韩精品影视| 亚洲91精品| 久久婷婷av| 免费一二一二在线视频| jizzjizz中国精品麻豆| 国产夫妻在线| 最新中文字幕在线播放| 精品香蕉视频| av中文字幕在线观看第一页| 婷婷成人综合| 黄色日韩精品| 婷婷丁香综合| 九一精品国产| 女主播福利一区| 亚洲一级特黄| 亚洲ww精品| 视频一区中文字幕精品| 日本视频中文字幕一区二区三区| 国产午夜一区| 精品一级视频| 久久人人97超碰国产公开结果| 日韩精品一二三四| 91精品在线免费视频| 国产精品a久久久久| 日韩高清三区| 国产精品伊人| 久久av免费看| av在线日韩| 久久香蕉精品| 久久国产免费看| 国产一区二区三区不卡av | 国产成人77亚洲精品www| 久草免费在线视频| 欧美丝袜一区| 亚洲一区二区成人| 久久精品天堂| 欧美午夜精品一区二区三区电影| 午夜在线精品偷拍| 日本欧美一区二区| 国产一区国产二区国产三区| 美女国产一区| 欧美国产三级| 日韩久久电影| 视频一区在线视频| 亚洲欧美视频| 国产乱码精品一区二区亚洲| 中文在线免费视频| 午夜av一区| 久久国产精品免费精品3p | 亚洲欧美日韩国产综合精品二区| 国产探花一区| 精精国产xxxx视频在线播放|