Java NIO 緩衝技術詳解
緩衝區(buffer)是從即將寫入通道(channel)或剛剛從通道中讀出的一段資料。它是一個持有資料,並扮演NIO通道端點的物件。緩衝區為資料訪問和讀寫過程提供正式機制。
它是NIO和老版Java I/O的一個主要區別。之前資料是直接從流(stream)中讀寫的,現在資料可以從緩衝區讀寫。在NIO中,通道是流的同義詞。想要了解更多關於NIO通道的資訊, 請閱讀上一篇教程Java NIO通道。
NIO緩衝區特徵
- Java NIO的基本組成模組就是緩衝區。
- 緩衝區提供一個固定大小的容器來讀取資料。
- 每個緩衝區都是可讀的,但只有特定緩衝區才是可寫的。
- 緩衝區是通道的端點。
- 只讀緩衝區的內容是不可變的,但是其mark、position和limit都是可變的。
- 預設情況下,緩衝區都不是執行緒安全的。
緩衝區型別
每種原始型別都有一個對應的緩衝區型別。所有的緩衝區類都實現了Buffer介面。最常用的緩衝區型別是ByteBuffer。如下是Java NIO包中提供的緩衝區型別。
- ByteBuffer
- CharBuffer
- ShortBuffer
- IntBuffer
- LongBuffer
- FloatBuffer
- DoubleBuffer
- MappedByteBuffer
緩衝區容量
緩衝區有固定大小,我們只能儲存少於“固定大小”的資料,固定大小的值就叫做緩衝區的容量。緩衝區一旦填滿則必須清空才能再次寫入。容量一旦設定好,在快取區的生命週期內都不會改變。
緩衝區界限
在寫入模式,緩衝區的界限就等於容量。在讀模式中,界限指向緩衝區最後一個資料位的下一位。當緩衝區被寫入時,界限一直遞增。緩衝區的界限永遠大於等於零且小於等於容量,0 <= 界限 <= 容量。
緩衝區位置
位置指向緩衝區當前地址。當緩衝區建立時,位置設定為零。讀寫過程中,位置會遞增到下一個索引位置。位置永遠在零和界限之間。
緩衝區標記
標記類似於給緩衝區設定書籤。呼叫 mark() 時當前位置就被記錄下來了,呼叫 reset() 時標記的位置就被恢復。
緩衝區flip、clear和rewind
緩衝區flip()
flip() 方法用來為緩衝區做準備,進行 get 操作或者準備新的寫入序列。flip() 將界限設定到當前位置,然後將位置置為0。
緩衝區clear()
clear() 方法用來為緩衝區做準備,進行 put 操作或者準備新的讀序列。clear() 將界限設定到容量的位置,並將位置置為0。
緩衝區rewind()
rewind() 方法用來再次讀取已經獲取過的資料。rewind()將緩衝區位置置0。
如何讀NIO緩衝區
- 首先建立緩衝區,分配容量。Buffer有一個 allocate(size) 方法,可以返回一個 Buffer 物件。ByteBuffer byteBuffer = ByteBuffer.allocate(512);
- 進行 flip 操作,準備進行讀操作。byteBuffer.flip();
- 下面可以讀入資料。int numberOfBytes = fileChannel.read(byteBuffer);
- 接下來可以從緩衝區讀取資料。char c = (char)byteBuffer.get();
如何寫NIO緩衝區
- 建立緩衝區,分配容量。ByteBuffer byteBuffer = ByteBuffer.allocate(512); //容量設為512
- 寫入資料。byteBuffer.put((byte) 0xff);
以上就是讀寫緩衝區的兩個例子。緩衝區有很多種型別以及很多種讀寫方法。你可以根據使用要求進行選擇。
相關文章
- Java NIO:緩衝區Java
- Java NIO 之緩衝區Java
- Java NIO 之 Buffer(緩衝區)Java
- Java-NIO之Buffer(緩衝區)Java
- Java緩衝流概述詳解(原理畫圖分析)Java
- Nio再學習之NIO的buffer緩衝區
- 詳解 Java NIOJava
- android View 繪圖雙緩衝技術AndroidView繪圖
- DEP緩解技術
- Wgpu圖文詳解(03)緩衝區BufferGPU
- DEP緩解技術(一)
- Java™ 教程(緩衝流)Java
- Java技術分享:NIO實戰教程!Java
- Java整數緩衝區Java
- Java中縮放緩衝影像Java
- java.IO緩衝流.studyJava
- Java RMI技術詳解與案例分析Java
- java.nio.Buffer.filp()方法的用法詳解Java
- 【死磕NIO】— NIO基礎詳解
- Java NIO全面詳解(看這篇就夠了)Java
- Java網路程式設計與NIO詳解10:深度解讀Tomcat中的NIO模型Java程式設計Tomcat模型
- 緩衝管理
- Java_轉換流和緩衝流Java
- Java緩衝輸出位元組流BufferedOutputStreamJava
- Java面試必問通訊框架NIO,原理詳解Java面試框架
- Cube 技術解讀 | Cube 小程式技術詳解
- Cube 技術解讀 | Cube 卡片技術棧詳解
- 給孩子解釋什麼是緩衝
- Service Mesh技術詳解
- Java網路程式設計和NIO詳解6:Linux epoll實現原理詳解Java程式設計Linux
- 輸出緩衝
- Java網路程式設計與NIO詳解11:Tomcat中的Connector原始碼分析(NIO)Java程式設計Tomcat原始碼
- IO流上:概述、字元流、緩衝區(java基礎)字元Java
- Redis緩衝區溢位及解決方案Redis
- Web除錯技術詳解Web除錯
- 詳解Vue.js 技術Vue.js
- web前端技術Mongoose詳解Web前端Go
- JavaScript 緩衝運動JavaScript
- 無緩衝阻塞 chan