<sup id="m40ya"></sup>
  • 
    
  • <kbd id="m40ya"></kbd>
    <samp id="m40ya"></samp>
    <ul id="m40ya"></ul>
  • 更多精彩內容,歡迎關注:

    視頻號
    視頻號

    抖音
    抖音

    快手
    快手

    微博
    微博

    java bytebuffer

    文檔

    java bytebuffer

    bytebuffer是buffer緩沖區的一種,可以看作提供了一些(未定義的)底層字節存儲的視圖,需要注意的是幾個操作的影響:flip(),clear(),rewind(),還有就是在讀取或者寫入時,標志的變化。
    推薦度:
    導讀bytebuffer是buffer緩沖區的一種,可以看作提供了一些(未定義的)底層字節存儲的視圖,需要注意的是幾個操作的影響:flip(),clear(),rewind(),還有就是在讀取或者寫入時,標志的變化。

    java bytebuffer是什么,讓我們一起了解一下?

    bytebuffer是buffer緩沖區的一種,看作提供了一些(未定義的)底層字節存儲的視圖,需要注意的是幾個操作的影響:flip(),clear(),rewind(),還有就是在讀取或者寫入時,標志的變化。

    比如get()方法導致position加1,SocketChannel采用的是非阻塞異步讀取流數據,在讀取的時候,通常是如下代碼示例:

    ByteBuffer.clear();
    SocketChannel.read(ByteBuffer);

    如果流中有數據,就會把數據從position開始讀到ByteBuffer中,在讀取之前ByteBuffer的clear操作會把position置為0,limit置為capability,也就是相當于清空了之前的內容,但是ByteBuffer中數組的內容在read之前是沒有改變的。

    read之后,通常就是開始從ByteBuffer中提取讀到的數據,如果你的數據是以自己定義的數據包的格式進行發送的,那你還需要判斷是否讀到了數據包的結尾,因為對流數據本身來說是沒有結尾這一說的。在提取數據之前,要先把position放到開始讀取時的位置,把limit放到當前位置,所以要flip一下,表示從position到limit的位置都是需要的數據。

    這樣以來也存在一個問題,當一次讀到的ByteBuffer不包含完整的數據包或者包含多個數據包,那么就需要在下一次繼續把這些包分拆出來。

    另外一個可能會用到的操作就是ByteBuffer.rewind(),他會把position置為0,limit保持不變,可以用于重復讀取一段數據。

    實戰操作:

    ByteBuffer類提供了4個靜態工廠方法來獲得ByteBuffer的實例:

    1、allocate(int capacity):從堆空間中分配一個容量大小為capacity的byte數組作為緩沖區的byte數據存儲器。

    2、allocateDirect(int capacity):是不使用JVM堆棧而是通過操作系統來創建內存塊用作緩沖區,它與當前操作系統能夠更好的耦合,因此能進一步提高I/O操作速度。但是分配直接緩沖區的系統開銷很大,因此只有在緩沖區較大并長期存在,或者需要經常重用時,才使用這種緩沖區。

    3、wrap(byte[] array):這個緩沖區的數據會存放在byte數組中,bytes數組或buff緩沖區任何一方中數據的改動都會影響另一方。其實ByteBuffer底層本來就有一個bytes數組負責來保存buffer緩沖區中的數據,通過allocate方法系統會幫你構造一個byte數組。

    4、wrap(byte[] array,int offset, int length):在上一個方法的基礎上可以指定偏移量和長度,這個offset也就是包裝后byteBuffer的position,而length呢就是limit-position的大小,從而我們可以得到limit的位置為length+position(offset)。

    測試方法:

    public?static?void?main(String?args[])?throws?FileNotFoundException?{??
    ??
    ????System.out.println("----------Test?allocate--------");??
    ????System.out.println("before?alocate:"??
    ????????????+?Runtime.getRuntime().freeMemory());??
    ??????
    ????//?如果分配的內存過小,調用Runtime.getRuntime().freeMemory()大小不會變化???
    ????//?要超過多少內存大小JVM才能感覺到???
    ????ByteBuffer?buffer?=?ByteBuffer.allocate(102400);??
    ????System.out.println("buffer?=?"?+?buffer);??
    ??????
    ????System.out.println("after?alocate:"??
    ????????????+?Runtime.getRuntime().freeMemory());??
    ??????
    ????//?這部分直接用的系統內存,所以對JVM的內存沒有影響??
    ????ByteBuffer?directBuffer?=?ByteBuffer.allocateDirect(102400);??
    ????System.out.println("directBuffer?=?"?+?directBuffer);??
    ????System.out.println("after?direct?alocate:"??
    ????????????+?Runtime.getRuntime().freeMemory());??
    ??????
    ????System.out.println("----------Test?wrap--------");??
    ????byte[]?bytes?=?new?byte[32];??
    ????buffer?=?ByteBuffer.wrap(bytes);??
    ????System.out.println(buffer);??
    ??????
    ????buffer?=?ByteBuffer.wrap(bytes,?10,?10);??
    ????System.out.println(buffer);???
    }

    以上就是小編今天的分享了,希望可以幫助到大家。

    文檔

    java bytebuffer

    bytebuffer是buffer緩沖區的一種,可以看作提供了一些(未定義的)底層字節存儲的視圖,需要注意的是幾個操作的影響:flip(),clear(),rewind(),還有就是在讀取或者寫入時,標志的變化。
    推薦度:
    為你推薦
    資訊專欄
    熱門視頻
    相關推薦
    java byte取值范圍 java calculate 蘋果13怎么開機 java calendar獲取當前時間 java callback java ceiling 平板如何錄屏 java cglib iPad怎么重啟 java channel java charat java charsequence java charset java cipher java class java class.forname java classloader java clob java clone() java collect java bundle java build.gradle java bufferedoutputstream java bufferedimage wps怎么求和 java break java blob java bit 如何清理win10電腦c盤 java binlog win10c盤滿了怎么清理 java binder java binary excel表格怎么合并單元格 java bigdecimal java benchmark java beanutils 手機充電發熱發燙是什么原因 手機充電時可以玩手機嗎 java bean
    Top 国产精品久久久99| 亚洲精品无码久久久久YW| 伊人 久久 精品| 久9视频这里只有精品| 国产亚洲精品看片在线观看| 精品欧洲男同同志videos| 91自产拍在线观看精品| 日韩人妻无码精品专区| 国产精品社区在线观看| 国产92成人精品视频免费| 亚洲AV无码成人精品区天堂 | 国产精品热久久毛片| 99久久人妻无码精品系列蜜桃| 亚洲精品美女久久久久99| 亚洲AⅤ永久无码精品AA| 欧美日韩精品一区二区在线视频| 久久精品www人人爽人人| 久久精品成人免费网站| 亚洲?V乱码久久精品蜜桃 | 国产精品爽黄69天堂a| 亚洲无删减国产精品一区| 91精品国产综合久久婷婷| 精品一区二区三区3d动漫| 久久精品人人做人人爱爱| 国产成人精品亚洲日本在线| 久久66久这里精品99| 国产在线不卡午夜精品2021 | 亚洲AV无码久久精品蜜桃| 中文字幕精品久久| 惠民福利中文字幕人妻无码乱精品| 日韩精品中文乱码在线观看| 无码日韩精品一区二区免费| 国产精品久久久久…| 2021国内精品久久久久精免费| 久热青青青在线视频精品| 国产精品一区二区久久国产| 久久91这里精品国产2020| 国产精品成人国产乱一区| 九九热这里都是精品| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 中文字幕日韩精品麻豆系列|