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