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