摘要:從通道進(jìn)行數(shù)據(jù)寫入創(chuàng)建一個緩沖區(qū),填充數(shù)據(jù),并要求通道寫入數(shù)據(jù)。三之通道主要內(nèi)容通道介紹通常來說中的所有都是從通道開始的。從中選擇選擇器維護(hù)注冊過的通道的集合,并且這種注冊關(guān)系都被封裝在當(dāng)中停止選擇的方法方法和方法。
由于內(nèi)容比較多,我下面放的一部分是我更新在我的微信公眾號上的鏈接,微信排版比較好看,更加利于閱讀。每一篇文章下面我都把文章的主要內(nèi)容給列出來了,便于大家學(xué)習(xí)與回顧。
Java面試通關(guān)手冊(Java學(xué)習(xí)指南) Github地址:https://github.com/Snailclimb/Java_Guide
IO流學(xué)習(xí)總結(jié)一 Java IO,硬骨頭也能變軟 主要內(nèi)容:
(1) 按操作方式分類結(jié)構(gòu)圖:
(2)按操作對象分類結(jié)構(gòu)圖
二 java IO體系的學(xué)習(xí)總結(jié)
IO流的分類:
按照流的流向分,可以分為輸入流和輸出流;
按照操作單元劃分,可以劃分為字節(jié)流和字符流;
按照流的角色劃分為節(jié)點(diǎn)流和處理流。
流的原理淺析:
java Io流共涉及40多個類,這些類看上去很雜亂,但實際上很有規(guī)則,而且彼此之間存在非常緊密的聯(lián)系, Java Io流的40多個類都是從如下4個抽象類基類中派生出來的。
InputStream/Reader: 所有的輸入流的基類,前者是字節(jié)輸入流,后者是字符輸入流。
OutputStream/Writer: 所有輸出流的基類,前者是字節(jié)輸出流,后者是字符輸出流。
常用的io流的用法
三 Java IO面試題NIO學(xué)習(xí)總結(jié)一 Java NIO 概覽 主要內(nèi)容:
NIO簡介:
Java NIO 是 java 1.4, 之后新出的一套IO接口NIO中的N可以理解為Non-blocking,不單純是New。
NIO的特性/NIO與IO區(qū)別:
1)IO是面向流的,NIO是面向緩沖區(qū)的;
2)IO流是阻塞的,NIO流是不阻塞的;
3)NIO有選擇器,而IO沒有。
讀數(shù)據(jù)和寫數(shù)據(jù)方式:
從通道進(jìn)行數(shù)據(jù)讀取 :創(chuàng)建一個緩沖區(qū),然后請求通道讀取數(shù)據(jù)。
從通道進(jìn)行數(shù)據(jù)寫入 :創(chuàng)建一個緩沖區(qū),填充數(shù)據(jù),并要求通道寫入數(shù)據(jù)。
NIO核心組件簡單介紹
Channels
Buffers
Selectors
二 Java NIO 之 Buffer(緩沖區(qū)) 主要內(nèi)容:
Buffer(緩沖區(qū))介紹:
Java NIO Buffers用于和NIO Channel交互。 我們從Channel中讀取數(shù)據(jù)到buffers里,從Buffer把數(shù)據(jù)寫入到Channels;
Buffer本質(zhì)上就是一塊內(nèi)存區(qū);
一個Buffer有三個屬性是必須掌握的,分別是:capacity容量、position位置、limit限制。
Buffer的常見方法
Buffer clear()
Buffer flip()
Buffer rewind()
Buffer position(int newPosition)
Buffer的使用方式/方法介紹:
分配緩沖區(qū)(Allocating a Buffer):
ByteBuffer buf = ByteBuffer.allocate(28);//以ByteBuffer為例子
寫入數(shù)據(jù)到緩沖區(qū)(Writing Data to a Buffer)
寫數(shù)據(jù)到Buffer有兩種方法:
1.從Channel中寫數(shù)據(jù)到Buffer
int bytesRead = inChannel.read(buf); //read into buffer.
2.通過put寫數(shù)據(jù):
buf.put(127);
Buffer常用方法測試
說實話,NIO編程真的難,通過后面這個測試?yán)樱憧赡懿拍苊銖?qiáng)理解前面說的Buffer方法的作用。
三 Java NIO 之 Channel(通道) 主要內(nèi)容:
Channel(通道)介紹
通常來說NIO中的所有IO都是從 Channel(通道) 開始的。
NIO Channel通道和流的區(qū)別:
FileChannel的使用
SocketChannel和ServerSocketChannel的使用
?DatagramChannel的使用
Scatter / Gather
Scatter: 從一個Channel讀取的信息分散到N個緩沖區(qū)中(Buufer).
Gather: 將N個Buffer里面內(nèi)容按照順序發(fā)送到一個Channel.
通道之間的數(shù)據(jù)傳輸
在Java NIO中如果一個channel是FileChannel類型的,那么他可以直接把數(shù)據(jù)傳輸?shù)搅硪粋€channel。
transferFrom() :transferFrom方法把數(shù)據(jù)從通道源傳輸?shù)紽ileChannel
transferTo() :transferTo方法把FileChannel數(shù)據(jù)傳輸?shù)搅硪粋€channel
四 Java NIO之Selector(選擇器) 主要內(nèi)容:
Selector(選擇器)介紹
Selector 一般稱 為選擇器 ,當(dāng)然你也可以翻譯為 多路復(fù)用器 。它是Java NIO核心組件中的一個,用于檢查一個或多個NIO Channel(通道)的狀態(tài)是否處于可讀、可寫。如此可以實現(xiàn)單線程管理多個channels,也就是可以管理多個網(wǎng)絡(luò)鏈接。
使用Selector的好處在于: 使用更少的線程來就可以來處理通道了, 相比使用多個線程,避免了線程上下文切換帶來的開銷。
Selector(選擇器)的使用方法介紹
Selector的創(chuàng)建
Selector selector = Selector.open();
注冊Channel到Selector(Channel必須是非阻塞的)
channel.configureBlocking(false); SelectionKey key = channel.register(selector, Selectionkey.OP_READ);
SelectionKey介紹
一個SelectionKey鍵表示了一個特定的通道對象和一個特定的選擇器對象之間的注冊關(guān)系。
從Selector中選擇channel(Selecting Channels via a Selector)
選擇器維護(hù)注冊過的通道的集合,并且這種注冊關(guān)系都被封裝在SelectionKey當(dāng)中.
停止選擇的方法
wakeup()方法 和close()方法。
模板代碼
有了模板代碼我們在編寫程序時,大多數(shù)時間都是在模板代碼中添加相應(yīng)的業(yè)務(wù)代碼。
客戶端與服務(wù)端簡單交互實例
五 Java NIO之擁抱Path和Files 主要內(nèi)容一 文件I/O基石:Path:
創(chuàng)建一個Path
File和Path之間的轉(zhuǎn)換,F(xiàn)ile和URI之間的轉(zhuǎn)換
獲取Path的相關(guān)信息
移除Path中的冗余項
二 擁抱Files類:
Files.exists() 檢測文件路徑是否存在
Files.createFile() 創(chuàng)建文件
Files.createDirectories()和Files.createDirectory()創(chuàng)建文件夾
Files.delete()方法 可以刪除一個文件或目錄
Files.copy()方法可以吧一個文件從一個地址復(fù)制到另一個位置
獲取文件屬性
遍歷一個文件夾
Files.walkFileTree()遍歷整個目錄
歡迎關(guān)注我的微信公眾號:"Java面試通關(guān)手冊"(一個有溫度的微信公眾號,期待與你共同進(jìn)步~~~堅持原創(chuàng),分享美文,分享各種Java學(xué)習(xí)資源):
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/69430.html
摘要:而我們現(xiàn)在都已經(jīng)發(fā)布了,的都不知道,這有點(diǎn)說不過去了。而對一個的讀寫也會有響應(yīng)的描述符,稱為文件描述符,描述符就是一個數(shù)字,指向內(nèi)核中的一個結(jié)構(gòu)體文件路徑,數(shù)據(jù)區(qū)等一些屬性。 前言 只有光頭才能變強(qiáng) 回顧前面: 給女朋友講解什么是代理模式 包裝模式就是這么簡單啦 本來我預(yù)想是先來回顧一下傳統(tǒng)的IO模式的,將傳統(tǒng)的IO模式的相關(guān)類理清楚(因為IO的類很多)。 但是,發(fā)現(xiàn)在整理的過程已...
摘要:該線程在此期間不能再干任何事情了。線程通訊線程之間通過等方式通訊。選擇器傳統(tǒng)的模式會基于服務(wù)器會為每個客戶端請求建立一個線程由該線程單獨(dú)負(fù)貴處理一個客戶請求。 本文是對NIO知識的歸納與整理 1.阻塞與同步 1)阻塞(Block)和非租塞(NonBlock): 阻塞和非阻塞是進(jìn)程在訪問數(shù)據(jù)的時候,數(shù)據(jù)是否準(zhǔn)備就緒的一種處理方式,當(dāng)數(shù)據(jù)沒有準(zhǔn)備的時候阻塞:往往需要等待缞沖區(qū)中的數(shù)據(jù)準(zhǔn)備好...
摘要:當(dāng)被實例化后,會調(diào)用方法初始化這個對象處理服務(wù)。方式可以在請求的實體內(nèi)容中向服務(wù)器發(fā)送數(shù)據(jù),傳送的數(shù)據(jù)量無限制。不存在敏感信息泄露問題。并且依賴于名為的,該默認(rèn)的屬性為。 下面是我整理下來的Servlet知識點(diǎn): showImg(https://segmentfault.com/img/bV3c9e);? 圖上的知識點(diǎn)都可以在我其他的文章內(nèi)找到相應(yīng)內(nèi)容。 Tomcat常見面試題 Tom...
閱讀 2470·2021-11-17 09:33
閱讀 757·2021-11-04 16:13
閱讀 1328·2021-10-14 09:50
閱讀 691·2019-08-30 15:53
閱讀 3657·2019-08-30 14:18
閱讀 3267·2019-08-30 14:14
閱讀 2093·2019-08-30 12:46
閱讀 3178·2019-08-26 14:05