更新時間:2022-03-29 10:53:31 來源:動力節點 瀏覽1794次
在 IO 之后,java 提供了新的 IO。這也稱為 NIO,從 JDK 1.4 開始引入。NIO 帶來了許多讀取和寫入文件、通道和套接字的功能。NIO API 有兩代,即 NIO.1 和 NIO.2。在 NIO.1 緩沖區中,引入了 charset 和 channels。在 JDK 7 中,NIO 框架引入了新的包 java.nio.file 等。這些被稱為 NIO.2 系列。它是 NIO 框架中的一個度量版本。NIO.2 提供了 Path、Files 等改變了 java 中文件處理方式的類。現在我們將詳細了解 NIO 框架,我們提供了頁面鏈接以通過示例獲得更好的清晰度。
Java NIO 從緩沖區開始。緩沖區是數據的容器。java.nio 包包含所有緩沖區 API。有數據類型特定的緩沖區,如 ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer。java.nio.Buffer 是上面提到的所有數據類型緩沖區擴展的基類。緩沖區是任何特定原始類型的元素序列。緩沖區的基本屬性是它的容量、限制和位置,并且緩沖區不是線程安全的。
緩沖區容量
一個緩沖區包含的元素個數就是緩沖區的容量。緩沖區的容量不能為負,并且永遠不會改變。
緩沖區限制
這是未讀取或未寫入的第一個元素的索引。限制不能為負,也不能大于其容量。
緩沖區中的位置
它將被讀取或寫入的下一個元素的索引。位置不能為負數,也不能大于其限制。
在 Buffer 中標記和重置
在某些時候,通過調用 reset 方法來重置緩沖區的位置。該位置稱為標記。reset() 只能在定義了標記且標記未始終定義時調用。如果我們定義了一個標記,并且在某個時候我們將位置和限制調整為低于標記,那么標記將被丟棄。標記、極限、位置和容量之間的關系如下所示。
0 <= 標記 <= 位置 <= 限制 <= 容量
Java NIO Buffer中clear()方法的作用
clear() 方法使緩沖區準備好在讀取和相對放置操作中接受新流。它設置了容量限制,并且位置變為零。
java NIO Buffer中flip()方法的作用
flip() 方法使緩沖區在寫入和相關獲取操作的情況下準備就緒。它將限制設置為當前位置并且位置變為零。
Java NIO Buffer中rewind()方法的作用
rewind() 使緩沖區準備好從緩沖區重新讀取數據。在這種情況下,限制保持不變,位置變為零。
Java NIO 中的 BufferUnderflowException
在從當前位置開始的讀取操作中,位置會增加被傳輸元素的數量,如果請求的元素數量超過限制,則相對 get 操作會拋出未經檢查的異常,即 java.nio。緩沖區下溢異常。
Java NIO 中的 BufferOverflowException
在寫入操作中,請求的元素被放入緩沖區,如果超過限制,則 put 方法拋出未經檢查的異常,即 java.nio.BufferOverflowException
現在找到一些 java.nio 包的 API。
ByteBuffer JDK 1.4 中引入了ByteBuffer。ByteBuffer 是字節的緩沖區。ByteBuffer 是抽象類,但它有靜態方法。
CharBuffer CharBuffer 是字符的緩沖區。CharBuffer 對象是通過調用 allocate() 創建的。
字符集 API 位于包 java.nio.charset 下。charset 的作用是字節序列和 16 位 unicode 字符之間的命名映射。java nio charsets API 中有編碼器和解碼器。我們一起稱它為編碼員。編碼器將字符轉換為字節,解碼器將字節轉換為任何特定的字符集。
Charset Charset 在給定的 charset 和 UNICODE 之間起到編碼和解碼的作用。
CharsetDecoder 和 CharsetEncoder在 java 中,從一個字符集到另一個字符集的編碼和解碼可以使用 java NIO API 完成。可以將具有任何字符集的 ByteBuffer 更改為 Unicode 字符集的 CharBuffer。
NIO 通道位于 java.nio.channels 包中。通道是與文件、套接字或任何硬件設備等實體的開放連接。通道可以異步關閉和中斷。有不同類型的渠道。
AsynchronousChannelGroup AsynchronousChannelGroup 在異步通道組中進行資源共享。
Pipe.SinkChannel 和 Pipe.SourceChannel Pipe 確保數據以與寫入 Pipe 相同的順序讀取。
FileLock FileLock 鎖定或嘗試鎖定文件的給定部分。
FileChannel FileChannel 保持一個可以修改的當前位置。
ReadableByteChannel通道返回 IO 類。ReadableByteChannel 由 Channels 獲取。newChannel(in) 通過傳遞輸入流。
在 JDK 7 中,NIO.2 已隨包 java.nio.file 一起引入。該 API 提供了訪問文件、文件屬性和文件系統的類。API文檔 支持符號鏈接,即任何文件位置的參考鏈接。通過 toPath() 方法可以實現 File 和 Path 之間的互操作性。我們將討論 java.nio.file API 的一些類。
路徑和路徑 Path的用途是在文件系統中定位文件。Path 可以靈活地通過部分證明路徑來定位文件。
文件它可以創建和刪除目錄以及文件。它還在現有文件和鏈接目錄之間創建鏈接。
目錄流DirectoryStream 遍歷文件并返回每個文件的 Path 實例。DirectoryStream 必須在迭代后關閉,否則會出現資源泄漏。
WatchService WatchService 有責任觀察所有注冊對象的變化。只有 watchable 對象應該注冊到 watch 服務來監控變化。
通過上述相信大家對Nio框架已經有了一些了解,如果大家對此比較感興趣,想了解更多相關知識,不妨來關注一下動力節點的NIO視頻教程,里面的課程內容通俗易懂,適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習