<!-- MarkdownTOC -->html
<!-- /MarkdownTOC -->java
(1) 按操做方式分類結構圖:面試
(2)按操做對象分類結構圖編程
IO流的分類:數組
流的原理淺析:微信
java Io流共涉及40多個類,這些類看上去很雜亂,但實際上頗有規則,並且彼此之間存在很是緊密的聯繫, Java Io流的40多個類都是從以下4個抽象類基類中派生出來的。網絡
經常使用的io流的用法併發
NIO簡介:app
Java NIO 是 java 1.4, 以後新出的一套IO接口NIO中的N能夠理解爲Non-blocking,不單純是New。異步
NIO的特性/NIO與IO區別:
讀數據和寫數據方式:
從通道進行數據讀取 :建立一個緩衝區,而後請求通道讀取數據。
從通道進行數據寫入 :建立一個緩衝區,填充數據,並要求通道寫入數據。
NIO核心組件簡單介紹
Buffer(緩衝區)介紹:
Buffer的常見方法
Buffer的使用方式/方法介紹:
ByteBuffer buf = ByteBuffer.allocate(28);//以ByteBuffer爲例子
寫數據到Buffer有兩種方法:
1.從Channel中寫數據到Buffer
int bytesRead = inChannel.read(buf); //read into buffer.
2.經過put寫數據:
buf.put(127);
Buffer經常使用方法測試
說實話,NIO編程真的難,經過後面這個測試例子,你可能才能勉強理解前面說的Buffer方法的做用。
Selector(選擇器)介紹
Selector(選擇器)的使用方法介紹
Selector selector = Selector.open();
channel.configureBlocking(false); SelectionKey key = channel.register(selector, Selectionkey.OP_READ);
SelectionKey介紹
一個SelectionKey鍵表示了一個特定的通道對象和一個特定的選擇器對象之間的註冊關係。
從Selector中選擇channel(Selecting Channels via a Selector)
選擇器維護註冊過的通道的集合,而且這種註冊關係都被封裝在SelectionKey當中.
中止選擇的方法
wakeup()方法 和close()方法。
模板代碼
有了模板代碼咱們在編寫程序時,大多數時間都是在模板代碼中添加相應的業務代碼。
客戶端與服務端簡單交互實例
一 文件I/O基石:Path:
二 擁抱Files類:
這個功能主要是爲了提升大文件的讀寫速度而設計的。內存映射文件(memory-mappedfile)能讓你建立和修改那些大到沒法讀入內存的文件。有了內存映射文件,你就能夠認爲文件已經所有讀進了內存,而後把它當成一個很是大的數組來訪問了。將文件的一段區域映射到內存中,比傳統的文件處理速度要快不少。內存映射文件它雖然最終也是要從磁盤讀取數據,可是它並不須要將數據讀取到OS內核緩衝區,而是直接將進程的用戶私有地址空間中的一部分區域與文件對象創建起映射關係,就好像直接從內存中讀、寫文件同樣,速度固然快了。
Java7中新增了AsynchronousFileChannel做爲nio的一部分。AsynchronousFileChannel使得數據能夠進行異步讀寫。
AIO是異步IO的縮寫,雖然NIO在網絡操做中,提供了非阻塞的方法,可是NIO的IO行爲仍是同步的。對於NIO來講,咱們的業務線程是在IO操做準備好時,獲得通知,接着就由這個線程自行進行IO操做,IO操做自己是同步的。
歡迎關注個人微信公衆號:"Java面試通關手冊"(一個有溫度的微信公衆號,期待與你共同進步~~~堅持原創,分享美文,分享各類Java學習資源):