<th id="wu2k2"><s id="wu2k2"></s></th> <blockquote id="wu2k2"></blockquote>
  • <tr id="wu2k2"></tr>
  • <samp id="wu2k2"><tbody id="wu2k2"></tbody></samp><samp id="wu2k2"><tbody id="wu2k2"></tbody></samp>
  • 更多精彩內容,歡迎關注:

    視頻號
    視頻號

    抖音
    抖音

    快手
    快手

    微博
    微博

    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精品久久| 国产精品酒店视频免费看| 久久夜色撩人精品国产| 欧美精品VIDEOSEX性欧美| 亚洲成人精品久久| 精品国产呦系列在线观看免费 | 国产精品嫩草影院永久一| 2021国产精品自拍| 久久国产成人精品麻豆| 国产三级精品三级在线观看| 国产精品美女久久久久av超清| 国产成人精品日本亚洲专| 久久精品乱子伦免费| 国产在vr视频精品观看| 亚洲精品高清在线| 国产一区二区三区国产精品| 国产99视频精品免费观看7| 精品日韩亚洲AV无码一区二区三区| 国产精品无码无卡在线播放| 伊人精品久久久久7777| 最新国产精品自拍| 国产乱码精品一区二区三区麻豆| 91精品啪在线观看国产线免费| 久久99精品视免费看| 国产精品无码午夜福利| 自拍偷自拍亚洲精品第1页| 国产精品亚洲高清一区二区| 日韩精品人妻av一区二区三区| 国产精品爆乳在线播放第一人称| 精品av天堂毛片久久久| 四虎永久在线精品波多野结衣| 亚洲午夜国产精品无卡| 久久精品国产免费观看三人同眠| 99精品久久久中文字幕| 一本久久a久久精品综合夜夜| 久久精品亚洲综合| 久久精品国产大片免费观看| 蜜桃麻豆WWW久久囤产精品| 91精品国产免费久久国语麻豆| 久久99热只有频精品8| 亚洲国产精品综合福利专区|