<strike id="cakm0"></strike>
  • <button id="cakm0"><dl id="cakm0"></dl></button>
  • <samp id="cakm0"><tbody id="cakm0"></tbody></samp>
    <samp id="cakm0"><pre id="cakm0"></pre></samp><ul id="cakm0"></ul>
    <strike id="cakm0"></strike>
    <li id="cakm0"></li>
  • <ul id="cakm0"></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 国产精品成人啪精品视频免费| 中文字幕一区二区精品区| 日本精品卡一卡2卡三卡| 久久久无码人妻精品无码| 久久久久久青草大香综合精品 | 国产99精品在线观看| 久久精品国产亚洲AV久| 亚洲国产精品无码中文字| 亚洲国产精品无码久久久久久曰 | 久久青青草原精品国产| 99re这里只有精品6| 亚洲?V无码成人精品区日韩| 成人精品一区二区三区电影| 精品国产福利一区二区| 无码国产69精品久久久久网站 | 精品少妇ay一区二区三区 | 久久精品青青草原伊人| 日韩人妻精品无码一区二区三区| 国模精品一区二区三区| 亚洲国产成人精品无码久久久久久综合 | 久久的精品99精品66| 日本无码小泬粉嫩精品图| 国产精品福利在线观看免费不卡 | 精品三级66在线播放| 国产精品自拍亚洲| 亚洲精品久久久久无码AV片软件| 久久久精品久久久久三级| 蜜臀98精品国产免费观看| 99re在线精品视频| 午夜精品一区二区三区免费视频| 精品久久一区二区三区| 日本精品高清一区二区| 2022国产成人精品视频人| 91精品国产综合久久精品| 中文字幕精品视频在线观看| 国产日韩久久久精品影院首页| 亚洲精品在线视频| 久久精品国产亚洲Aⅴ香蕉 | 亚洲一区精品无码| 国产精品亚洲A∨天堂不卡| 精品亚洲综合在线第一区|