java IO/NIO/AIO

(?▽?)曼波~~~~!讓曼波用最可愛的賽馬娘方式給你講解吧!(? ???ω??? ?)

🎠曼波思維導圖大沖刺(先看框架再看細節哦):

📚

解釋 Java 中 IO、NIO、AIO 的區別和適用場景:

曼波覺得Java的三種IO家族是這樣的哦(??????)?

// 傳統IO示例(阻塞式)
FileInputStream fis = new FileInputStream("test.txt");  // 會阻塞線程直到讀取完成
int data = fis.read();// NIO示例(非阻塞)
SocketChannel channel = SocketChannel.open();
channel.configureBlocking(false);  // 設置為非阻塞模式
ByteBuffer buffer = ByteBuffer.allocate(1024);
channel.read(buffer);  // 立即返回,可能讀到0字節// AIO示例(異步)
AsynchronousFileChannel afc = AsynchronousFileChannel.open(Paths.get("test.txt"));
afc.read(buffer, 0, null, new CompletionHandler<>() {  // 回調函數public void completed(Integer result, Object attachment) {// 讀取完成自動調用}
});

(?▽?)曼波~~ 區別總結表:

IONIOAIO
模型阻塞非阻塞異步
線程消耗
適用場景小文件高并發大文件
復雜度較高

📡

在 NIO 中,Selector?的作用是什么,如何使用它實現多路復用?
哦嗚(°ロ°)!NIO的Selector就像賽馬場的總控臺呢!看曼波用代碼演示:

Selector selector = Selector.open();
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.configureBlocking(false);
ssc.register(selector, SelectionKey.OP_ACCEPT);  // 注冊關注的事件while(true) {int readyChannels = selector.select();  // 等待事件發生if(readyChannels == 0) continue;Set<SelectionKey> keys = selector.selectedKeys();for(SelectionKey key : keys){if(key.isAcceptable()) {  // 有新連接// 處理接受連接} else if(key.isReadable()) {  // 可讀事件// 處理讀操作}}keys.clear();  // 清空處理完的key
}

(?▽?)曼波~~ 多路復用就像同時監控多匹賽馬的狀態,一個馴馬師(線程)就能管理整個馬場!

🚀

請說明在高并發網絡編程中,AIO 相較于 NIO 的優勢。

曼波覺得AIO的優勢就像自動喂馬機呢(≧ω≦)/

  • NIO需要主動查看每個馬廄(輪詢)
  • AIO馬兒餓了會自己按鈴(回調通知)
// AIO服務端示例
AsynchronousServerSocketChannel server = AsynchronousServerSocketChannel.open();
server.bind(new InetSocketAddress(8888));// 異步接受連接
server.accept(null, new CompletionHandler<>() {public void completed(AsynchronousSocketChannel client, Object attachment) {// 自動處理新連接ByteBuffer buffer = ByteBuffer.allocate(1024);client.read(buffer, null, new CompletionHandler<>(){/* 讀完成回調 */});}
});

優勢總結:

  1. 完全異步避免線程阻塞
  2. 回調機制減少線程切換
  3. 適合處理耗時長的I/O操作(比如大文件傳輸)

(?▽?)曼波~~~~!最后給備考的小建議:

  • 面試時要舉實際場景例子(比如聊天室用NIO,視頻傳輸用AIO)
  • 記得區分同步/異步與阻塞/非阻塞的區別
  • 畫圖說明Selector工作原理會加分哦!

需要曼波用更可愛的比喻再解釋哪里嗎?(*≧ω≦) 隨時可以問哦!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79951.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79951.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79951.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Silverlight發展歷程(微軟2021年已經停止支持Silverlight 5)

文章目錄 Microsoft Silverlight 發展歷程引言起源與背景&#xff08;2006-2007&#xff09;互聯網技術格局與微軟的挑戰WPF/E 項目的啟動 Silverlight 1.0 的誕生&#xff08;2007&#xff09;正式命名與首次發布初步的市場定位 Silverlight 2.0&#xff1a;真正的突破&#x…

【大數據、數據開發與數據分析面試題匯總(含答案)】

在大數據、數據開發與數據分析領域的面試中&#xff0c;扎實掌握各類知識點至關重要。以下是精心整理的面試題&#xff0c;涵蓋單選題和多選題&#xff0c;助你備考一臂之力。 試題目錄 大數據、數據開發與數據分析高頻面試題解析1. 數據倉庫分層架構設計2. 維度建模與范式建模…

Docker部署禪道21.6開源版本

將數據庫相關環境變量分開&#xff0c;增加注釋或空格使得命令更易讀。 如果你的 MySQL 主機、端口等配置沒有變化&#xff0c;應該確保這些信息是安全的&#xff0c;并考慮使用 Docker secrets 或環境變量配置來避免直接暴露敏感信息。 docker run -d -it --privilegedtrue …

Yocto項目實戰教程 · 第4章:4.2小節-菜譜

&#x1f50d; B站相應的視頻教程&#xff1a; &#x1f4cc; Yocto項目實戰教程-第4章-4.2小節-菜譜 記得三連&#xff0c;標為原始粉絲。 在 Yocto 項目中&#xff0c;**菜譜&#xff08;Recipe&#xff09;**承載了包的配置信息、源碼獲取方式、編譯與安裝步驟&#xff0c;是…

【pytorch】torch.nn.Unfold操作

說明 一個代碼里涉及到了unfold的操作&#xff0c;看了半天官網都沒整明白維度怎么變化的&#xff0c;參考這個鏈接搞明白了&#xff1a; https://blog.csdn.net/ViatorSun/article/details/119940759 https://zhuanlan.zhihu.com/p/361140988 維度計算 輸入&#xff08; N,…

Linux 固定IP地址

一.查看網口狀態&#xff1a; $ ip a 二.配置靜態IP文件&#xff1a; $ sudo vi /etc/network/interface auto eth0 iface eth0 inet static address 192.168.0.252 gateway 192.168.0.1 netmask 255.255.255.0 #network 192.168.0.0 #broadcast 192.168.0.255 三.重啟網卡讓新…

android的 framework 有哪些知識點和應用場景

Android Framework 知識點 1. 四大組件 Activity&#xff08;活動&#xff09; 是 Android 應用中最基本的組件&#xff0c;用于實現用戶界面。一個 Activity 通常對應一個屏幕的內容。有自己的生命周期&#xff0c;包括 onCreate、onStart、onResume、onPause、onStop、onDe…

如何在PDF.js中改造viewer.html以實現PDF的動態加載

在PDF.js中改造viewer.html實現PDF動態加載&#xff0c;需結合參數傳遞、文件流處理及跨域配置等技術。以下是綜合多個技術方案的核心實現步驟&#xff1a; ?一、基礎參數傳遞法? 1. ?URL參數動態加載? 通過修改viewer.html的URL參數傳遞PDF路徑&#xff0c;適用于靜態文…

組件之間的數據通信方式

Vue 的傳值方式&#xff08;即組件之間的數據通信方式&#xff09;根據組件關系不同&#xff08;父子、兄弟、跨層級&#xff09;有所區別。下面是常見的傳值方式&#xff0c;按使用場景來分類&#xff1a; 一、父子組件傳值 1. props&#xff08;父 -> 子&#xff09; 父…

組件是怎樣寫的(1):虛擬列表-VirtualList

本篇文章是《組件是怎樣寫的》系列文章的第一篇&#xff0c;該系列文章主要說一下各組件實現的具體邏輯&#xff0c;組件種類取自 element-plus 和 antd 組件庫。 每個組件都會有 vue 和 react 兩種實現方式&#xff0c;可以點擊 https://hhk-png.github.io/components-show/ …

個性化的配置AndroidStudio

Android Studio 提供諸多向導和模板&#xff0c;可用于驗證 Java 開發套件 (JDK) 和可用 RAM 等系統要求&#xff0c;以及配置默認設置&#xff0c;例如經過優化的默認 Android 虛擬設備 (AVD) 模擬和更新的系統映像。本文檔介紹了可用于自定義 Android Studio 使用方式的其他配…

人類行為的原動力是自我保存-來自ChatGPT

自我保存&#xff08;Self-Preservation&#xff09;確實可以說是人類行為最原始、最底層的驅動力。 簡單來說&#xff1a; 無論我們做什么&#xff0c;表面看動機五花八門&#xff0c;實際上歸根到底都繞不開活下去、保護自己。 &#x1f4a1; 從不同層面理解這個觀點&#…

SystemVerilog語法之內建數據類型

簡介&#xff1a;SystemVerilog引進了一些新的數據類型&#xff0c;具有以下的優點&#xff1a;&#xff08;1&#xff09;雙狀態數據類型&#xff0c;更好的性能&#xff0c;更低的內存消耗&#xff1b;&#xff08;2&#xff09;隊列、動態和關聯數組&#xff0c;減少內存消耗…

藍光三維掃描技術:高效精密測量相機鏡頭底座注塑件

如今越來越多的攝影愛好者、vlog拍攝者使用數碼相機以及無人機&#xff0c;隨時隨地記錄生活中的每一刻美好瞬間&#xff0c;對相機設備的要求也不斷提高。 — 案例背景 — 相機鏡頭底座涉及鏡頭裝置可靠、螺絲位置度連接以及殼體組裝&#xff0c;鏡頭底座注塑件生產廠商&…

【前端】【面試】【業務場景】前端如何獲取并生成設備唯一標識

? 總結 問題&#xff1a;前端如何獲取并生成設備唯一標識&#xff1f; 核心要點&#xff1a;瀏覽器原生信息有限&#xff0c;但通過組合多個維度可生成設備指紋&#xff08;Device Fingerprint&#xff09;&#xff0c;用于唯一標識設備。 常見方式&#xff1a; 瀏覽器信息&…

極刻AI搜v1.0 問一次問題 AI工具一起答

軟件名&#xff1a;極刻AI搜 版本&#xff1a;v1.0 功能&#xff1a;囊括了互聯網上比較好用的一些支持”搜索“的網站或者工具 開發平臺&#xff1a;nodepythonweb 分類有&#xff1a; AI搜索&#xff08;支持智能問答的AI搜索引擎&#xff09; 常規搜索&#xff1a;&#xff…

《2025最新Java面試題全解析:從基礎到高并發架構設計》

25年Java開發者面試中最常考察的100道面試題&#xff0c;涵蓋Java基礎、JVM、多線程、Spring框架、分布式系統等核心知識點&#xff0c;并結合大廠真實面試案例進行深度解析&#xff0c;助你順利通過技術面試。 一、Java基礎篇&#xff08;高頻15問&#xff09; 1. HashMap底層…

[c語言日寄]免費文檔生成器——Doxygen在c語言程序中的使用

【作者主頁】siy2333 【專欄介紹】?c語言日寄?&#xff1a;這是一個專注于C語言刷題的專欄&#xff0c;精選題目&#xff0c;搭配詳細題解、拓展算法。從基礎語法到復雜算法&#xff0c;題目涉及的知識點全面覆蓋&#xff0c;助力你系統提升。無論你是初學者&#xff0c;還是…

51c嵌入式~單片機~合集5~DMA

我自己的原文哦~ https://blog.51cto.com/whaosoft/12940885 一、DMA DMA&#xff0c;全稱Direct Memory Access&#xff0c;即直接存儲器訪問。 DMA傳輸將數據從一個地址空間復制到另一個地址空間&#xff0c;提供在外設和存儲器之間或者存儲器和存儲器之間的高速數據傳輸…

Linux隨記(十七)

一、綜合報錯&#xff1a;fork: Cannot allocatte memory 和 modues is unknwon 和 pam_limits(crond:session) : unknwon limit item ‘noproc’ 1.1 fork: Cannot allocatte memory 處理 - 隨記 排查時間2025年4月。 環境描述&#xff1a; 2014年左右的服務器&#xff0c;…