IO

来源:https://www.cnblogs.com/Si-wuxie/p/18100790
-Advertisement-
Play Games

IO 所有輸入流的基類:InputStream / Reader 所有輸出流的基類:OutputStream / Writer 位元組流 InputStream常用方法:read(), skip(), available(), close() FileInputStream DataInputStre ...


IO

所有輸入流的基類:InputStream / Reader 所有輸出流的基類:OutputStream / Writer

位元組流

InputStream常用方法:read(), skip(), available(), close()

  • FileInputStream

  • DataInputStream : 用於讀取指定類型數據,不能單獨使用,必須結合其它流,比如 FileInputStream 。

  • ObjectInputStream : 從輸入流中讀取 Java 對象(反序列化)

  • BufferedInputStream

OutputStream常用方法:write(), flush(), close()

  • FileOutputStream

  • DataOutputStream

  • ObjectOutputStream: 將對象寫入到輸出流 (序列化)。

  • BufferedOutputStream

常用字元編碼所占位元組數?utf8 :英文占 1 位元組,中文占 3 位元組,unicode:任何字元都占 2 個位元組,gbk:英文占 1 位元組,中文占 2 位元組。

字元流

Reader(字元輸入流)

Reader 用於讀取文本, InputStream 用於讀取原始位元組。

Reader 常用方法:read(), skip(), close()

位元組流轉換為字元流的橋梁:InputStreamReader

// 位元組流轉換為字元流的橋梁
public class InputStreamReader extends Reader {
}
// 用於讀取字元文件
public class FileReader extends InputStreamReader {
}

Writer(字元輸出流)

Writer用於將數據(字元信息)寫入到目的地(通常是文件)
Writer 常用方法:write(), append(), flush(), close()

字元流轉換為位元組流的橋梁:OutputStreamWriter

// 字元流轉換為位元組流的橋梁
public class OutputStreamWriter extends Writer {
}
// 用於寫入字元到文件
public class FileWriter extends OutputStreamWriter {
}

位元組緩衝流

 BufferedInputStream

 BufferedOutputStream

位元組緩衝流會先將讀取到的位元組存放在緩存區,大幅減少 IO 次數,提高讀取效率。

字元緩衝流

BufferedReader

BufferedWriter

列印流

PrintStream

PrintWriter

IO模型

BIO (Blocking I/O)同步阻塞IO模型

應用程式發起 read 調用後,會一直阻塞,直到內核把數據拷貝到用戶空間。

NIO (Non-blocking/New I/O)

Java NIO 核心知識總結 | JavaGuide

同步非阻塞 IO 模型:應用程式會一直發起 read 調用,等待數據從內核空間拷貝到用戶空間的這段時間里,線程依然是阻塞的,直到在內核把數據拷貝到用戶空間。(通過輪詢操作,避免了一直阻塞。)

  • NIO 面向塊,I/O 面向流

  • 非阻塞、面向緩衝、基於通道的 I/O,可以使用少量的線程來處理多個連接,大大提高了 I/O 效率和併發。

NIO核心組件:

  • Buffer(緩衝區)

  • Channel(通道):雙向的、可讀可寫的數據傳輸通道

  • Selector(選擇器)

NIO零拷貝:零拷貝是指電腦執行 IO 操作時,CPU 不需要將數據從一個存儲區域複製到另一個存儲區域,從而可以減少上下文切換以及 CPU 的拷貝時間。

AIO (Asynchronous I/O)

非同步 IO 模型:非同步 IO 是基於事件和回調機制實現的,也就是應用操作之後會直接返回,不會堵塞在那裡,當後臺處理完成,操作系統會通知相應的線程進行後續的操作。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文腳本修改自github上的一個腳本。 環境為Mac OS-Arm版 1. 創建一個目錄 mkdir magisk-sh 2. 下載Magisk apk 可以去github上下載,鏈接:https://github.com/topjohnwu/Magisk/releases 本文采用v26.1版本 ...
  • 一、GridRow/GridCol 1.概述 柵格佈局是一種通用的輔助定位工具,可以幫助開發人員解決多尺寸多設備的動態佈局問題。通過將頁面劃分為等寬的列數和行數,柵格佈局提供了可循的規律性結構,方便開發人員對頁面元素進行定位和排版。 此外,柵格佈局還提供了一種統一的定位標註,幫助保證不同設備 ...
  • 網頁圖像漸變的方法(HTML+CSS)(漸變與切換) Date: 2024.03.27 參考 色彩 runoob-漸變色工具 漸變 - 水平多圖 效果 HTML <div class="conBox pubCon"> <div class="imgBox"> <img class="img1" sr ...
  • 一、是什麼 CDN (全稱 Content Delivery Network),即內容分髮網絡 構建在現有網路基礎之上的智能虛擬網路,依靠部署在各地的邊緣伺服器,通過中心平臺的負載均衡、內容分發、調度等功能模塊,使用戶就近獲取所需內容,降低網路擁塞,提高用戶訪問響應速度和命中率。CDN 的關鍵技術主 ...
  • 一、是什麼 DNS(Domain Names System),功能變數名稱系統,是互聯網一項服務,是進行功能變數名稱和與之相對應的 IP 地址進行轉換的伺服器 簡單來講,DNS相當於一個翻譯官,負責將功能變數名稱翻譯成ip地址 IP 地址:一長串能夠唯一地標記網路上的電腦的數字 功能變數名稱:是由一串用點分隔的名字組成的 Int ...
  • 今天讀到阮一峰的293期周刊,其中有句話很讓我震動——“一周是一年的2%”。 過去的時間里,我都沒有在意時間的流逝,過的好的時候就覺得一周過的好快,周三一過這周也就過去了,過的不好的時候就感覺很漫長。 確實,我們沒有幾周可以虛度的,多浪費幾周,一年就過去了。 我努力將每一周過好,那麼這2%就有價值了 ...
  • 提到這個 %20,想必大家都見過,熟悉一點編碼的人,還會知道這玩意就是空格轉換而來! 那麼我們一起破解, 如何編碼而來? ...
  • 你知道v-model指令是如何變成組件上的modelValue屬性和@update:modelValue事件呢?這一過程是在編譯時還是運行時進行的呢? ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...