最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文解讀java.nio.ByteBuffer

 更新時間:2023年08月21日 10:18:50   作者:bjxiaxueliang  
這篇文章主要介紹了java.nio.ByteBuffer的用法解讀,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

java.nio.ByteBuffer 是一個可以進行 緩沖區(qū)分配 、 讀取 寫入 的緩沖區(qū),其 持有一個字節(jié)數(shù)組

并通過4個屬性:

  • capacity 
  • limit 
  • position 
  • mark

來管理緩沖區(qū),進行字節(jié)級別讀取和數(shù)據(jù)寫入。

基于此,ByteBuffer常被用來處理網(wǎng)絡(luò)協(xié)議和I/O操作。

一、使用舉例

以下為ByteBuffer的使用舉例:

  • 可以使用put()方法將數(shù)據(jù)寫入緩沖區(qū);
  • 可以使用flip()方法切換緩沖區(qū)為讀取模式;
  • 可以使用rewind()方法倒回緩沖區(qū)的初始位置;
  • 可以使用get()方法讀取緩沖區(qū)中的數(shù)據(jù);
  • 可以使用clear()方法清空緩沖區(qū),以便再次寫入數(shù)據(jù)。
import java.nio.ByteBuffer;
public class JavaTest {
    public static void main(String[] args)
    {
        System.out.println("~~~~~~~~ put(byte b) ~~~~~~~~");
        // 分配一個5字節(jié)的buffer
        ByteBuffer byteBuffer = ByteBuffer.allocate(5);
        // 向buffer中添加兩個字節(jié)的數(shù)據(jù),空余3個字節(jié)數(shù)據(jù)
        byteBuffer.put((byte)10);
        byteBuffer.put((byte)20);
        // 輸出整個字節(jié)數(shù)組
        printByteBuffer(byteBuffer);
        System.out.println("~~~~~~~~ flip() ~~~~~~~~");
        // 轉(zhuǎn)為讀模式
        byteBuffer.flip();
        // 輸出整個字節(jié)數(shù)組
        printByteBuffer(byteBuffer);
        System.out.println("~~~~~~~~ get() ~~~~~~~~");
        // 讀取當(dāng)前 position 
        System.out.println(byteBuffer.get());
        // 輸出整個字節(jié)數(shù)組
        printByteBuffer(byteBuffer);
        System.out.println("~~~~~~~~ rewind() ~~~~~~~~");
        // 倒回緩沖區(qū)的初始位置
        byteBuffer.rewind();
        printByteBuffer(byteBuffer);
        System.out.println("~~~~~~~~ get(byte[] dst, int offset, int length) ~~~~~~~~");
        // 將buffer中數(shù)據(jù)寫入到dstBytes中
        byte[] dstBytes = new byte[2];
        byteBuffer.get(dstBytes, 0, dstBytes.length);
        printByteBuffer(byteBuffer);
    }
    public static void printByteBuffer(ByteBuffer byteBuffer) {
        byte[] bytes = byteBuffer.array();
        int position = byteBuffer.position();
        int limit = byteBuffer.limit();
        int remining = byteBuffer.remaining();
        System.out.println("byteBuffer: "
                + Arrays.toString(bytes)
                + "\nPosition: " + position
                + " Limit: " + limit
                + " Remining: " + remining);
    }
}

控制臺輸出如下:

~~~~~~~~ put(byte b) ~~~~~~~~
byteBuffer: [10, 20, 0, 0, 0]
Position: 2 Limit: 5 Remining: 3
~~~~~~~~ flip() ~~~~~~~~
byteBuffer: [10, 20, 0, 0, 0]
Position: 0 Limit: 2 Remining: 2
~~~~~~~~ get() ~~~~~~~~
10
byteBuffer: [10, 20, 0, 0, 0]
Position: 1 Limit: 2 Remining: 1
~~~~~~~~ rewind() ~~~~~~~~
byteBuffer: [10, 20, 0, 0, 0]
Position: 0 Limit: 2 Remining: 2
~~~~~~~~ get(byte[] dst, int offset, int length) ~~~~~~~~
byteBuffer: [10, 20, 0, 0, 0]
Position: 2 Limit: 2 Remining: 0

二、原理簡析

前邊說過 ByteBuffer持有一個字節(jié)數(shù)組

并通過4個屬性:

  • capacity
  • limit
  • position
  • mark來管理緩沖區(qū)

這4個屬性遵循

mark <= position <= limit <= capacity ???????

下表格是對著4個屬性的解釋:

屬性描述
Capacity容量,即可以容納的最大數(shù)據(jù)量
Limit緩沖區(qū)的當(dāng)前終點,不能對緩沖區(qū)超過極限的位置進行讀寫操作
Position下一個要被讀或?qū)懙脑氐乃饕?/td>
Mark標記??烧{(diào)用mark()設(shè)置標記(mark=position),然后調(diào)用reset()讓position恢復(fù)到標記的位置

初始化,各控制屬性狀態(tài):

例如調(diào)用

ByteBuffer byteBuffer = ByteBuffer.allocate(5); 

進行ByteBuffer存儲空間分配,

各屬性見下圖所示:

寫入數(shù)據(jù)后,各控制控制屬性狀態(tài):

例如調(diào)用

byteBuffer.put((byte)'a') 

寫入數(shù)據(jù)后,

各屬性見下圖所示:

讀取數(shù)據(jù)后,各控制控制屬性狀態(tài):

例如調(diào)用

byteBuffer.get() 

讀取4個字節(jié)后,

各屬性見下圖所示:

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java中的Struts2攔截器詳解

    java中的Struts2攔截器詳解

    本篇文章主要介紹了java中的Struts2攔截器淺解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • java讀取csv文件示例分享(java解析csv文件)

    java讀取csv文件示例分享(java解析csv文件)

    這篇文章主要介紹了java讀取csv文件示例,這個java解析csv文件的例子很簡單,下面直接上代碼,大家參考使用吧
    2014-03-03
  • executor包執(zhí)行器功能

    executor包執(zhí)行器功能

    這篇文章主要介紹了executor包執(zhí)行器功能,executor包中的各個子包提供的功能,最終這些功能都由Executor接口及其實現(xiàn)類共同對外提供服務(wù)。下文介紹該執(zhí)行功能,具有一定的參考價值,需要的朋友可以考一下
    2022-02-02
  • java網(wǎng)上圖書商城(1)User模塊

    java網(wǎng)上圖書商城(1)User模塊

    這篇文章主要介紹了java網(wǎng)上圖書商城,User模塊,實現(xiàn)用戶注冊功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Spring事務(wù)失效的十大陷阱與終極解決方案

    Spring事務(wù)失效的十大陷阱與終極解決方案

    本文將全面剖析Spring事務(wù)失效的各種場景,提供完整的代碼示例和解決方案,幫你徹底掌握事務(wù)管理的精髓,感興趣的小伙伴跟著小編一起來看看吧
    2025-10-10
  • nacos中的配置使用@Value注解獲取不到值的原因及解決方案

    nacos中的配置使用@Value注解獲取不到值的原因及解決方案

    這篇文章主要介紹了nacos中的配置使用@Value注解獲取不到值的原因分析,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • 一文帶你學(xué)會Java網(wǎng)絡(luò)編程

    一文帶你學(xué)會Java網(wǎng)絡(luò)編程

    網(wǎng)絡(luò)編程是指編寫運行在多個設(shè)備(計算機)的程序,這些設(shè)備都通過網(wǎng)絡(luò)連接起來。這篇文章將帶大家深入了解一下Java的網(wǎng)絡(luò)編程,需要的可以了解一下
    2022-08-08
  • 詳解Nacos配置中心的實現(xiàn)

    詳解Nacos配置中心的實現(xiàn)

    Spring Cloud Alibaba 是阿里巴巴提供的一站式微服務(wù)開發(fā)解決方案。而 Nacos 作為 Spring Cloud Alibaba 的核心組件之一,提供了兩個非常重要的功能:注冊中心和配置中心,我們今天來了解和實現(xiàn)一下二者
    2022-08-08
  • Spring常用數(shù)據(jù)源的xml配置詳解

    Spring常用數(shù)據(jù)源的xml配置詳解

    這篇文章主要介紹了Spring常用數(shù)據(jù)源的xml配置詳解,數(shù)據(jù)源是連接到數(shù)據(jù)庫的一類路徑,它包含了訪問數(shù)據(jù)庫的信息(地址、用戶名、密碼),數(shù)據(jù)源就像是排水管道,需要的朋友可以參考下
    2023-07-07
  • 基于java+springboot+mybatis+laiyu實現(xiàn)學(xué)科競賽管理系統(tǒng)

    基于java+springboot+mybatis+laiyu實現(xiàn)學(xué)科競賽管理系統(tǒng)

    這篇文章主要介紹了基于java+springboot+mybatis+laiyu實現(xiàn)的學(xué)科競賽管理系統(tǒng),本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09

最新評論

左权县| 昭觉县| 和田县| 新沂市| 贵州省| 太原市| 旬邑县| 镇宁| 达尔| 郎溪县| 潜江市| 库尔勒市| 玉山县| 河北区| 镇原县| 合肥市| 威海市| 呼图壁县| 昭通市| 德江县| 长顺县| 桂平市| 涿州市| 安平县| 黔南| 固始县| 九江县| 盐城市| 长春市| 洪湖市| 江都市| 太和县| 即墨市| 麻江县| 衡阳市| 马山县| 定南县| 正宁县| 瓦房店市| 承德市| 西安市|