国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 網(wǎng)站 > 建站經(jīng)驗(yàn) > 正文

-Android在JNI中使用ByteBuffer的方法

2019-11-02 14:23:49
字體:
供稿:網(wǎng)友

   Android在JNI中使用ByteBuffer的方法

  本文實(shí)例講述了Android在JNI中使用ByteBuffer的方法。分享給大家供大家參考。具體如下:

  一、ByteBuffer 定義

  在NIO中,數(shù)據(jù)的讀寫操作始終是與緩沖區(qū)相關(guān)聯(lián)的(讀取時(shí)信道(SocketChannel)將數(shù)據(jù)讀入緩沖區(qū),寫入時(shí)首先要將發(fā)送的數(shù)據(jù)按順序填入緩沖區(qū))

  緩沖區(qū)是定長(zhǎng)的,基本上它只是一個(gè)列表,它的所有元素都是基本數(shù)據(jù)類型。ByteBuffer是最常用的緩沖區(qū),它提供了讀寫其他數(shù)據(jù)類型的方法,且信道的讀寫方法只接收ByteBuffer。

  ByteBuffer有以下幾種常見屬性:

  mark:初始值為-1,標(biāo)記索引地點(diǎn);

  position:初始值為0,索引下標(biāo);

  limit:最好定義成bytebuffer的長(zhǎng)度,即允許可讀空間長(zhǎng)度;

  capacity:緩沖區(qū)能容納的數(shù)據(jù)元素的最大數(shù)量,創(chuàng)建之后無法被改變;

  二、ByteBuffer使用

  1. 創(chuàng)建ByteBuffer

  ① 使用allocate()創(chuàng)建:

  ?

1 2 ByteBuffer buf = ByteBuffer.allocate(length); //length表示buf的長(zhǎng)度

  ② 使用數(shù)組創(chuàng)建:

  ?

1 2 ByteBuffer buf = ByteBuffer.wrap(byteArray); //byteArray表示一個(gè)數(shù)組

  2. 回繞緩沖區(qū)

  ?

1 buf.flip();

  這個(gè)方法用來將緩沖區(qū)準(zhǔn)備為數(shù)據(jù)傳出狀態(tài),執(zhí)行以上方法后,輸出通道會(huì)從數(shù)據(jù)的開頭而不是末尾開始.回繞保持緩沖區(qū)中的數(shù)據(jù)不變,只是準(zhǔn)備寫入而不是讀取。

  3. 清除緩沖區(qū)

  ?

1 buf.clear();

  這個(gè)方法實(shí)際上也不會(huì)改變緩沖區(qū)的數(shù)據(jù),而只是簡(jiǎn)單的重置了緩沖區(qū)的主要索引值.不必為了每次讀寫都創(chuàng)建新的緩沖區(qū),那樣做會(huì)降低性能.相反,要重用現(xiàn)在的緩沖區(qū),在再次讀取之前要清除緩沖區(qū)。

  4. ByteBuffer與byte[]交互

  ?

1 2 3 4 5 6 7 byte[] bytearray = new byte[10]; ByteBuffer buf = ByteBuffer.wrap(bytearray); //將數(shù)組寫入buf bytearray = new byte[buf.remaining()]; buf.get(bytearray,0,bytearray.length()); //將數(shù)據(jù)讀到數(shù)組中 bytearray = new byte[buf.capacity()];

  三、ByteBuffer與JNI交互

  在Java1.4版本中引入的JNI有三個(gè)函數(shù)可以用于NIO的直接緩沖器。一個(gè)直接字節(jié)緩沖器是一個(gè)用于字節(jié)數(shù)據(jù)的容器,Java將盡力在它上面執(zhí)行本機(jī)I/O操作。JNI定義了三個(gè)用于NIO操作的函數(shù)。

  基于到存儲(chǔ)器地址的指針以及存儲(chǔ)器長(zhǎng)度(容量),函數(shù)分配并且返回一個(gè)新的Java.nio.ByteBuffer。如果函數(shù)沒有針對(duì)當(dāng)前Java虛擬機(jī)實(shí)現(xiàn),則返回NULL,或者拋出一個(gè)異常。如果沒有存儲(chǔ)器可用,則將會(huì)拋出一個(gè)OutOfMemoryException。

  ?

1 jobject NewDirectByteBuffer(void* address, jlong capacity);
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 怀化市| 桓仁| 将乐县| 武川县| 克拉玛依市| 怀安县| 济宁市| 亚东县| 连平县| 万年县| 新巴尔虎右旗| 通渭县| 文化| 博野县| 连云港市| 怀安县| 罗城| 黄骅市| 陆河县| 政和县| 泰和县| 宁晋县| 东乌| 宜丰县| 常德市| 新巴尔虎右旗| 多伦县| 乃东县| 依兰县| 罗城| 永新县| 体育| 百色市| 久治县| 香港 | 乌拉特后旗| 营口市| 龙胜| 汝南县| 宜兴市| 宜兰县|