深入分析 Java I/O 的工作機制

摘要:北京時間20191006關于【深入分析 Java I/O 的工作機制】的具體情況和說明,讓www.liuytk.icu新聞頻道以圖文形式為您慢慢道來。

向您推薦
繼續播放

圖 1. InputStream 相關類層次結構

輸入流根據數據類型和操作方式又被劃分成若干個子類,每個子類分別處理不同操作類型,OutputStream 輸出流的類層次結構也是類似,如下圖所示:

圖 2. OutputStream 相關類層次結構

這里就不詳細解釋每個子類如何使用了,如果不清楚的話可以參考一下 JDK 的 API 說明文檔,這里只想說明兩點,一個是操作數據的方式是可以組合使用的,如這樣組合使用OutputStream out = new BufferedOutputStream(new ObjectOutputStream(new FileOutputStream("fileName"));

還有一點是流最終寫到什么地方必須要指定,要么是寫到磁盤要么是寫到網絡中,其實從上面的類圖中我們發現,寫網絡實際上也是寫文件,只不過寫網絡還有一步需要處理就是底層操作系統再將數據傳送到其它地方而不是本地磁盤。關于網絡 I/O 和磁盤 I/O 我們將在后面詳細介紹。

2.基于字符的 I/O 操作接口

不管是磁盤還是網絡傳輸,最小的存儲單元都是字節,而不是字符,所以 I/O 操作的都是字節而不是字符,但是為啥有操作字符的 I/O 接口呢?這是因為我們的程序中通常操作的數據都是以字符形式,為了操作方便當然要提供一個直接寫字符的 I/O 接口,如此而已。我們知道字符到字節必須要經過編碼轉換,而這個編碼又非常耗時,而且還會經常出現亂碼問題,所以 I/O 的編碼問題經常是讓人頭疼的問題。

下圖是寫字符的 I/O 操作接口涉及到的類,Writer 類提供了一個抽象方法 write(char cbuf[], int off, int len) 由子類去實現。

圖 3. Writer 相關類層次結構

讀字符的操作接口也有類似的類結構,如下圖所示:

圖 4.Reader 類層次結構

圖 5. 字符解碼相關類結構

InputStreamReader 類是字節到字符的轉化橋梁,InputStream 到 Reader 的過程要指定編碼字符集,否則將采用操作系統默認字符集,很可能會出現亂碼問題。StreamDecoder 正是完成字節到字符的解碼的實現類。也就是當你用如下方式讀取一個文件時:

清單 1.讀取文件try {

StringBuffer str = new StringBuffer();

char[] buf = new char[1024];

FileReader f = new FileReader("file");

while(f.read(buf)>0){

str.append(buf);

}

str.toString();

} catch (IOException e) {}

FileReader 類就是按照上面的工作方式讀取文件的,FileReader 是繼承了 InputStreamReader 類,實際上是讀取文件流,然后通過 StreamDecoder 解碼成 char,只不過這里的解碼字符集是默認字符集。

寫入也是類似的過程如下圖所示:

圖 6. 字符編碼相關類結構

通過 OutputStreamWriter 類完成,字符到字節的編碼過程,由 StreamEncoder 完成編碼過程。

二、磁盤 I/O 工作機制

前面介紹了基本的 Java I/O 的操作接口,這些接口主要定義了如何操作數據,以及介紹了操作兩種數據結構:字節和字符的方式。還有一個關鍵問題就是數據寫到何處,其中一個主要方式就是將數據持久化到物理磁盤,下面將介紹如何將數據持久化到物理磁盤的過程。

圖 7. 從磁盤讀取文件

當傳入一個文件路徑,將會根據這個路徑創建一個 File 對象來標識這個文件,然后將會根據這個 File 對象創建真正讀取文件的操作對象,這時將會真正創建一個關聯真實存在的磁盤文件的文件描述符 FileDescriptor,通過這個對象可以直接控制這個磁盤文件。由于我們需要讀取的是字符格式,所以需要 StreamDecoder 類將 byte 解碼為 char 格式,至于如何從磁盤驅動器上讀取一段數據,由操作系統幫我們完成。至于操作系統是如何將數據持久化到磁盤以及如何建立數據結構需要根據當前操作系統使用何種文件系統來回答,至于文件系統的相關細節可以參考另外的文章。

圖 8.Socket 通信示例

主機 A 的應用程序要能和主機 B 的應用程序通信,必須通過 Socket 建立連接,而建立 Socket 連接必須需要底層 TCP/IP 協議來建立 TCP 連接。建立 TCP 連接需要底層 IP 協議來尋址網絡中的主機。我們知道網絡層使用的 IP 協議可以幫助我們根據 IP 地址來找到目標主機,但是一臺主機上可能運行著多個應用程序,如何才能與指定的應用程序通信就要通過 TCP 或 UPD 的地址也就是端口號來指定。這樣就可以通過一個 Socket 實例唯一代表一個主機上的一個應用程序的通信鏈路了。

1.NIO 的工作方式

BIO 帶來的挑戰

BIO 即阻塞 I/O,不管是磁盤 I/O 還是網絡 I/O,數據在寫入 OutputStream 或者從 InputStream 讀取時都有可能會阻塞。一旦有線程阻塞將會失去 CPU 的使用權,這在當前的大規模訪問量和有性能要求情況下是不能接受的。雖然當前的網絡 I/O 有一些解決辦法,如一個客戶端一個處理線程,出現阻塞時只是一個線程阻塞而不會影響其它線程工作,還有為了減少系統線程的開銷,采用線程池的辦法來減少線程創建和回收的成本,但是有一些使用場景仍然是無法解決的。如當前一些需要大量 HTTP 長連接的情況,像淘寶現在使用的 Web 旺旺項目,服務端需要同時保持幾百萬的 HTTP 連接,但是并不是每時每刻這些連接都在傳輸數據,這種情況下不可能同時創建這么多線程來保持連接。即使線程的數量不是問題,仍然有一些問題還是無法避免的。如這種情況,我們想給某些客戶端更高的服務優先級,很難通過設計線程的優先級來完成,另外一種情況是,我們需要讓每個客戶端的請求在服務端可能需要訪問一些競爭資源,由于這些客戶端是在不同線程中,因此需要同步,而往往要實現這些同步操作要遠遠比用單線程復雜很多。以上這些情況都說明,我們需要另外一種新的 I/O 操作方式。

圖 9.NIO 相關類圖

上圖中有兩個關鍵類:Channel 和 Selector,它們是 NIO 中兩個核心概念。我們還用前面的城市交通工具來繼續比喻 NIO 的工作方式,這里的 Channel 要比 Socket 更加具體,它可以比作為某種具體的交通工具,如汽車或是高鐵等,而 Selector 可以比作為一個車站的車輛運行調度系統,它將負責監控每輛車的當前運行狀態:是已經出戰還是在路上等等,也就是它可以輪詢每個 Channel 的狀態。這里還有一個 Buffer 類,它也比 Stream 更加具體化,我們可以將它比作為車上的座位,Channel 是汽車的話就是汽車上的座位,高鐵上就是高鐵上的座位,它始終是一個具體的概念,與 Stream 不同。Stream 只能代表是一個座位,至于是什么座位由你自己去想象,也就是你在去上車之前并不知道,這個車上是否還有沒有座位了,也不知道上的是什么車,因為你并不能選擇,這些信息都已經被封裝在了運輸工具(Socket)里面了,對你是透明的。NIO 引入了 Channel、Buffer 和 Selector 就是想把這些信息具體化,讓程序員有機會控制它們,如:當我們調用 write() 往 SendQ 寫數據時,當一次寫的數據超過 SendQ 長度是需要按照 SendQ 的長度進行分割,這個過程中需要有將用戶空間數據和內核地址空間進行切換,而這個切換不是你可以控制的。而在 Buffer 中我們可以控制 Buffer 的 capacity,并且是否擴容以及如何擴容都可以控制。

理解了這些概念后我們看一下,實際上它們是如何工作的,下面是典型的一段 NIO 代碼:public void selector() throws IOException {

ByteBuffer buffer = ByteBuffer.allocate(1024);


查看更多
日本黃大片免費播放器 黃色片 日本一級特黃大片免色 特別黃的免費大片視頻 黃色大片 黃網站 黃色免費網站 黃色電影免費片日本大片,視頻,電影,大片,完整版,網站,全過程

實時推薦

《偽鈔者之末路》馬馳演繹“復仇狂人”氣場全開
推薦 日本一級特黃大片免色 2019-10-17 16:48 341 5922
樟樹全國第50屆全國要交會參會嘉賓名單,看看有誰來了?
推薦 日本一級特黃大片免色 2019-10-17 16:48 594 2284
湖南推介湘南秋色美 助推文化旅游融入粵港澳大灣區
推薦 日本一級特黃大片免色 2019-10-17 16:48 210 9493
小區整治“專盯”高空拋物和電動車亂停亂放 居民:干得漂亮
推薦 日本一級特黃大片免色 2019-10-17 16:48 474 5285
西寧一中集團校開展“初心與使命”主題演講比賽
推薦 日本一級特黃大片免色 2019-10-17 16:48 418 1884
天津市河北區選派醫療隊前往清水縣開展醫療幫扶
推薦 日本一級特黃大片免色 2019-10-17 16:48 985 6428
幼師羚羚說小朋友爸媽對你不管不顧,長大以后你會聽他們的話嗎?
推薦 日本一級特黃大片免色 2019-10-17 16:48 608 1598
有車一族必備的實用工具,你有幾個?
推薦 日本一級特黃大片免色 2019-10-17 16:48 110 4932
清潔環境 美化廠區 淮北市臨渙選煤廠加強環境治理顯成效
推薦 日本一級特黃大片免色 2019-10-17 16:48 973 6126
全國扶貧日前夕 衡陽市中心醫院深入肥美村調研扶貧工作
推薦 日本一級特黃大片免色 2019-10-17 16:48 102 5923
笑話,老媽買了很多小龍蝦,打算晚上下鍋
推薦 日本一級特黃大片免色 2019-10-17 16:48 167 5980
工作便利貼|履職盡責當“四防”
推薦 日本一級特黃大片免色 2019-10-17 16:48 275 8699
唐山旅游在第二十四屆中國北方旅游交易會“大放異彩”!
推薦 日本一級特黃大片免色 2019-10-17 16:48 282 4807
明日方舟送葬人技能怎么樣? 送葬人1-10級技能屬性介紹
推薦 日本一級特黃大片免色 2019-10-17 16:48 197 6720
蒙陰縣司法局岱崮司法所 聯合岱崮鎮衛生院開展“愛護環境 關愛健康”活動
推薦 日本一級特黃大片免色 2019-10-17 16:48 608 4364
忠法要聞|三地法院簽約 共話京津冀司法協同機制
推薦 日本一級特黃大片免色 2019-10-17 16:48 755 1722
宋茜發文悼念雪莉,用密語道別好姐妹,網友:別說了,看哭了
推薦 日本一級特黃大片免色 2019-10-17 16:48 987 8057
欣賞一下湖南張家界的美景
推薦 日本一級特黃大片免色 2019-10-17 16:48 164 6523
曹操禮賢下士,諸葛亮為何不投靠曹操?原因其實很簡單,就1個字
推薦 日本一級特黃大片免色 2019-10-17 16:48 835 514
「改裝系列」奧地利小老虎KTM250改裝Tracker
推薦 日本一級特黃大片免色 2019-10-17 16:48 247 971
神武3電腦版第九把140級神兵有著落了?無名氏也許會帶來答案
推薦 日本一級特黃大片免色 2019-10-17 16:48 563 856
【開發區】勸酒沒忍住,喝! 酒后開了車,查!
推薦 日本一級特黃大片免色 2019-10-17 16:47 527 9386
國家電子商務進農村綜合示范項目農產品上行及品牌運營
推薦 日本一級特黃大片免色 2019-10-17 16:47 994 3375
哈爾濱市“就業扶貧行動日”專場招聘會在巴彥縣舉行
推薦 日本一級特黃大片免色 2019-10-17 16:47 819 4693
伍爾特受邀出席第六屆國際核電運維大會
推薦 日本一級特黃大片免色 2019-10-17 16:47 768 2908
每套床單被套都可掃碼看洗滌情況!讓軍運村運動員睡得放心
推薦 日本一級特黃大片免色 2019-10-17 16:47 116 7340
20家企業意向簽約入駐沈陽·中關村信息谷創新中心
推薦 日本一級特黃大片免色 2019-10-17 16:47 868 8753
常德交警柳葉湖大隊:外地車輛爆胎 交警齊力解困
推薦 日本一級特黃大片免色 2019-10-17 16:47 936 7300
再次降價!庫克放大招,iPhone11成實惠價,網友:早知道等等了
推薦 日本一級特黃大片免色 2019-10-17 16:47 346 4504
西安22歲輔警執勤時被撞入綠化帶因公殉職
推薦 日本一級特黃大片免色 2019-10-17 16:47 946 3765
義勇鑄就中國魂、古塔放歌給黨聽
推薦 日本一級特黃大片免色 2019-10-17 16:47 273 556
周潤發為了她自殺,劉德華暗戀她,34歲公開出柜卻被拋棄!
推薦 日本一級特黃大片免色 2019-10-17 16:47 722 9372
iPhone需求強勁 臺積電營收利潤雙雙超預期
推薦 日本一級特黃大片免色 2019-10-17 16:47 929 5141
華為mate 30要提前發布!是要跟新三款iPhone提前開始“死磕”?
推薦 日本一級特黃大片免色 2019-10-17 16:47 730 5291
麗水云和,秋天來這小城!云海、梯田、紅楓……足夠你大飽眼福
推薦 日本一級特黃大片免色 2019-10-17 16:47 474 5925
門興再出“新扎卡”!瑞士中場將是下一個創紀錄轉會?
推薦 日本一級特黃大片免色 2019-10-17 16:47 565 5113
遼寧沈陽:攜鄉村民宿等特色文旅資源走進江蘇
推薦 日本一級特黃大片免色 2019-10-17 16:47 92 5113
如何申請上佐治亞大學碩士?
推薦 日本一級特黃大片免色 2019-10-17 16:47 918 9548
哈醫大二院心內科啟動美麗鄉村健康行——“心”扶貧行動項目
推薦 日本一級特黃大片免色 2019-10-17 16:47 261 3135
多個部門聯合推進,舟山對這種行為堅決說“不”!
推薦 日本一級特黃大片免色 2019-10-17 16:47 465 666
風味阜陽||羊頭肉與羊蹄子
推薦 日本一級特黃大片免色 2019-10-17 16:47 594 712
別因過度保護讓你和孩子陷入危機
推薦 日本一級特黃大片免色 2019-10-17 16:47 485 8548
大二男生校園里種雜交水稻 歷時5個月終變早餐
推薦 日本一級特黃大片免色 2019-10-17 16:47 676 2408
德州市人民醫院選手榮獲山東省“凈護天使”血液凈化標準操作技能比賽二等獎
推薦 日本一級特黃大片免色 2019-10-17 16:47 544 5348
劉嶺到老店鎮調研脫貧攻堅工作
推薦 日本一級特黃大片免色 2019-10-17 16:47 702 8253
8個輪子的途樂,比喬治巴頓還硬漢,停車得2個車位,全球僅1臺
推薦 日本一級特黃大片免色 2019-10-17 16:47 231 4011
歐洲NPL噩耗不斷,Knights宣布解散PUBG分部隊員
推薦 日本一級特黃大片免色 2019-10-17 16:47 403 3666
淮北市西園中學秋季運動會圓滿結束
推薦 日本一級特黃大片免色 2019-10-17 16:47 902 5796
S17賽季丨發育路強勢英雄推薦,他們將是同職業下的精英射手
推薦 日本一級特黃大片免色 2019-10-17 16:47 305 3978
秋天的額濟納旗,胡楊樹勝似油畫,大美無限
推薦 日本一級特黃大片免色 2019-10-17 16:47 129 5745
最近熱銷的非洲冰菜,原來是這樣種出來的
推薦 日本一級特黃大片免色 2019-10-17 16:47 563 3362
與孩子溝通的技巧:通過話語走進小孩的內心,理解他的感受
推薦 日本一級特黃大片免色 2019-10-17 16:47 758 4376
金秋十月“塞上明珠”青銅峽秋意濃
推薦 日本一級特黃大片免色 2019-10-17 16:47 702 8946
雄風社區:多部門聯合檢查旅館消防安全
推薦 日本一級特黃大片免色 2019-10-17 16:47 270 8460
《王者榮耀》“自走棋”怎么玩?一圖看懂
推薦 日本一級特黃大片免色 2019-10-17 16:47 204 3294
河北滄州“一節一會”將首次融合舉辦
推薦 日本一級特黃大片免色 2019-10-17 16:47 537 9030
五彩斑斕的河池大化奇石
推薦 日本一級特黃大片免色 2019-10-17 16:47 531 3164
國內首家閥門行業學院:開封大學閥門學院揭牌
推薦 日本一級特黃大片免色 2019-10-17 16:47 188 5529
6位女星穿空姐服PK,唐嫣關曉彤楊冪陳喬恩趙奕歡,誰最美?
推薦 日本一級特黃大片免色 2019-10-17 16:47 312 8183
他曾是魯能棄將如今被國安用成寶,表現可圈可點,如今成當紅國腳
推薦 日本一級特黃大片免色 2019-10-17 16:47 312 7673
天降橫財,多數藏著陷阱
推薦 日本一級特黃大片免色 2019-10-17 16:47 227 8116
天水市在主題教育中全面啟動10個民生領域突出問題集中整治行動
推薦 日本一級特黃大片免色 2019-10-17 16:47 883 9524
蘭州司機注意啦,這個道路半幅封閉施工,出行提示看這里
推薦 日本一級特黃大片免色 2019-10-17 16:47 125 9747
具荷拉返韓讓人揪心,IU為崔雪莉守靈兩夜,雪莉出殯fx合體
推薦 日本一級特黃大片免色 2019-10-17 16:47 758 5186
桃江18個扶貧車間吸納215位貧困戶就業
推薦 日本一級特黃大片免色 2019-10-17 16:47 393 6504
蓬安縣相如鎮召開“陽光問政”壩壩會!
推薦 日本一級特黃大片免色 2019-10-17 16:47 342 941
太方便了!以后刷手機就能坐火車
推薦 日本一級特黃大片免色 2019-10-17 16:47 175 6782
在好看的皮囊和有趣的靈魂中,任天堂選了現實版“真香”
推薦 日本一級特黃大片免色 2019-10-17 16:47 492 6301
首批嘗鮮者 realme將推出搭載高通集成式5G芯片智能手機
推薦 日本一級特黃大片免色 2019-10-17 16:47 667 5921
豬蘢草首次在天水菊展上亮相
推薦 日本一級特黃大片免色 2019-10-17 16:47 484 8913
綢都盛澤從“織造之都”邁向“時尚之城”
推薦 日本一級特黃大片免色 2019-10-17 16:47 474 8492
有這些“身體語言”的女人,大都人品堪憂,男人應謹慎交往
推薦 日本一級特黃大片免色 2019-10-17 16:47 544 2963
史上最能打皇帝,所有侍從都戰死了,他卻還手舞長刀與敵軍酣戰
推薦 日本一級特黃大片免色 2019-10-17 16:47 233 6250
我市開展扶貧日集中宣傳活動
推薦 日本一級特黃大片免色 2019-10-17 16:46 483 2790
益陽水生生物保護區十年禁捕,2萬捕撈船將全面退出
推薦 日本一級特黃大片免色 2019-10-17 16:46 793 835
宣鋼再度“崛起”如今生產能力已具300+品種
推薦 日本一級特黃大片免色 2019-10-17 16:46 123 6166
泰安市領導來泰山區調研殘疾人家庭無障礙改造工作
推薦 日本一級特黃大片免色 2019-10-17 16:46 565 992
鼓樓區召開住宅小區物業管理工作現場觀摩暨驗交流會
推薦 日本一級特黃大片免色 2019-10-17 16:46 693 5582
究竟有多美?被世人贊譽“人間天上一湖水,萬千景象在其中”
推薦 日本一級特黃大片免色 2019-10-17 16:46 738 2243
秋冬季想要穿得好看又時髦,這5款女生比入
推薦 日本一級特黃大片免色 2019-10-17 16:46 860 3745
山東煙臺全面做好冬季集中供熱準備
推薦 日本一級特黃大片免色 2019-10-17 16:46 208 3302
廣東今年住房保障 目標任務超額完成
推薦 日本一級特黃大片免色 2019-10-17 16:46 869 2292
有生之年一定不能錯過的世界十大地質奇跡
推薦 日本一級特黃大片免色 2019-10-17 16:46 728 6936
日本正在向馬里亞納海溝靠近?科學家束手無策,他們卻早有準備
推薦 日本一級特黃大片免色 2019-10-17 16:46 810 7136
湖北房縣住房和城鄉建設局開展“進村住戶”活動
推薦 日本一級特黃大片免色 2019-10-17 16:46 520 5577
云南玉溪積極創建安全生產標準化工地
推薦 日本一級特黃大片免色 2019-10-17 16:46 754 919
慶云玉米收獲完成62%,小麥已播種46%
推薦 日本一級特黃大片免色 2019-10-17 16:46 646 5620
咸陽市交通運輸系統舉行安全生產管理培訓
推薦 日本一級特黃大片免色 2019-10-17 16:46 826 8414
云南綠色食品全國巡展產銷對接活動將亮相鄭州
推薦 日本一級特黃大片免色 2019-10-17 16:46 445 2379
漠河北極圣誕滑雪場首滑迎客再次刷新全國首滑記錄
推薦 日本一級特黃大片免色 2019-10-17 16:46 429 5818
常德市法學會來津督導工作
推薦 日本一級特黃大片免色 2019-10-17 16:46 94 6031
信息技術創新應用公有云寧夏上線
推薦 日本一級特黃大片免色 2019-10-17 16:46 808 3090
商務車超速撞護欄,一乘員被困
推薦 日本一級特黃大片免色 2019-10-17 16:46 797 3952
李磊首次英國個人展覽《詩象》11月啟幕
推薦 日本一級特黃大片免色 2019-10-17 16:46 882 7004
曾被譽為歌壇第一玉女,48歲穿西裝配直筒褲,絲毫不見歲月痕跡
推薦 日本一級特黃大片免色 2019-10-17 16:46 765 569
興平交警開展交通安全宣傳“七進”活動
推薦 日本一級特黃大片免色 2019-10-17 16:46 410 6458
今天不知道吃什么的,就來試試這14道雞蛋小炒,簡單經濟實惠
推薦 日本一級特黃大片免色 2019-10-17 16:46 538 2119
河南“益農商城扶貧APP”上線
推薦 日本一級特黃大片免色 2019-10-17 16:46 597 3642
工信部信息通信管理局副局長隋靜:推進云計算大數據的普及應用
推薦 日本一級特黃大片免色 2019-10-17 16:46 94 6785
撫順十大特色美食,您吃過幾種?
推薦 日本一級特黃大片免色 2019-10-17 16:46 513 1523
双色球胆拖中奖计算表