日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Java层与Jni层的数组传递(转)

發(fā)布時間:2025/7/14 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java层与Jni层的数组传递(转) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

源:Java層與Jni層的數(shù)組傳遞

Android開發(fā)中,經常會在Java代碼與Jni層之間傳遞數(shù)組(byte[]),一個典型的應用是Java層把需要發(fā)送給客戶端的數(shù)據(jù)流傳遞到Jni層,由Jni層的Socket代碼發(fā)送出去,當然,Jni層也需要把從Socket接收到的數(shù)據(jù)流返回給Java層。我簡單地總結了一下,從Java層到Jni層,從Jni層到JAVA層,各有3種傳遞方式,下面用代碼示例簡單地介紹一下。

?

示例代碼的主要文件有兩個,一個是Native.java,是Java層的類;另一個是Native.c,是JNI層的文件,關鍵的地方我都用注釋添加到代碼中了,完整的代碼見博文后面的附件。

?

一、 從Java傳遞數(shù)組到Jni層

?

Jni層接收到Java層傳遞過來的byte[]數(shù)組,一般有2個函數(shù)來獲取它的值,一個 GetByteArrayRegion,另一個是 GetByteArrayElements ,前者是進行值拷貝,將Java端數(shù)組的數(shù)據(jù)拷貝到本地的數(shù)組中,后者是指針的形式,將本地的數(shù)組指針直接指向Java端的數(shù)組地址,其實本質上是JVM在堆上分配的這個數(shù)組對象上增加一個引用計數(shù),保證垃圾回收的時候不要釋放,從而交給本地的指針使用,使用完畢后指針一定要記得通過ReleaseByteArrayElements進行釋放,否則會產生內存泄露。

?

首先看Native.java的定義:

?

?

再看看對應的native.c的實現(xiàn)代碼:

?

?

二、 從Jni層傳遞數(shù)組到Java層

?

把Jni層定義的數(shù)組傳遞到Java層,一般有兩種方法,一種是通過native函數(shù)的返回值來傳遞,另一種是通過jni層回調java層的函數(shù)來傳遞,后者多用于jni的線程中。無論哪種方法,都離不開 SetByteArrayRegion 函數(shù),該函數(shù)將本地的數(shù)組數(shù)據(jù)拷貝到了 Java 端的數(shù)組中。下面只介紹前一種方式,即通過native函數(shù)返回值的方式傳遞jni層的數(shù)組,回調的方式其實用法類似,就不詳細介紹了。

?

首先看Native.java的定義:

?

?

? ?再看看native.c是如何實現(xiàn)的:

?

由上述代碼示例可以看出,首先通過 NewByteArray 在堆上分配數(shù)組對象,然后通過SetByteArrayRegion 把本地的數(shù)組數(shù)據(jù)拷貝到堆上分配的數(shù)組中去,然后通過返回值將分配的數(shù)組對象返回到Java層即可。對于回調的方式,這幾步操作也是一樣的,唯一的不同是,回調方式不是以返回值的方式將數(shù)組對象返回給Java層,而是在回調函數(shù)中,以回調函數(shù)參數(shù)的形式返回給Java層。

?

三、 Direct Buffer 方式傳遞

?

Java和Jni層的數(shù)組傳遞還有一個比較重要的方式,就是通過Direct Buffer來傳遞,這種方式類似于在堆上創(chuàng)建創(chuàng)建了一個Java和Jni層共享的整塊內存區(qū)域,無論是Java層或者Jni層均可訪問這塊內存,并且Java端與Jni端同步變化,由于是采用的是共享內存的方式,因此相比于普通的數(shù)組傳遞,效率更高,但是由于構造/析構/維護這塊共享內存的代價比較大,所以小數(shù)據(jù)量的數(shù)組建議還是采用上述方式,Direct Buffer方式更適合長期使用頻繁訪問的大塊內存的共享。具體使用方法介紹如下:

?

首先看Native.java的定義:

?

再看看native.c是如何實現(xiàn)的:

?

由上述代碼可以看出,其中使用起來還是很簡單的,Jni層只需要通過GetDirectBufferAddress函數(shù)即可獲取到這塊共享的內存的地址,Direct Buffer的管理工作均由操作系統(tǒng)來負責。

?

四、 總結

?

關于Java與Jni層的數(shù)組傳遞就介紹到這里了,其實并不復雜,希望上述代碼對初學者能有所幫助,有任何疑問或者不清楚的地方歡迎留言或者來信lujun.hust@gmail.com交流。

轉載于:https://www.cnblogs.com/LittleTiger/p/4557066.html

總結

以上是生活随笔為你收集整理的Java层与Jni层的数组传递(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲一个色 | 日本黄网免费 | 成人国产精品免费观看 | 97精品一区二区视频在线观看 | 韩国精品视频在线观看 | 人妻 日韩精品 中文字幕 | 亚洲精品性视频 | 漂亮人妻洗澡被公强 日日躁 | 狠狠干狠狠操视频 | 国产99久久久 | 日本一区二区不卡在线 | 97自拍视频在线 | 亚洲精品无码专区 | 成人h动漫精品一区 | 九月婷婷色 | 韩国三色电费2024免费吗怎么看 | 热99这里只有精品 | 99超碰在线观看 | 好姑娘在线观看高清完整版电影 | 99精品小视频 | 亚洲一区二区在线免费 | 国产一区二区三区福利 | 91 在线观看 | www.777含羞草| 国产精品乱码一区二区视频 | 都市激情麻豆 | 亚洲免费视频一区二区 | 国产精品尤物视频 | 欧美日韩三级在线 | 欧美一区二区三区激情啪啪 | 亚洲永久在线观看 | 999国产精品视频 | 日本少妇一区 | 免费成人在线观看 | 五月婷婷丁香 | 亚洲第一区视频 | 国内激情自拍 | 欧洲av一区二区 | 狠狠看| 夜夜嗨老熟女av一区二区三区 | 特级丰满少妇一级aaaa爱毛片 | 美梦视频大全在线观看高清 | 国产日本欧美一区二区 | 91精品国产综合久久久密臀九色 | 色七七桃花影院 | 黄网站在线播放 | 黄色av网页 | 国产福利合集 | proumb性欧美在线观看 | 性高潮久久久久久 | 91国产中文字幕 | 操干网 | 操视频网站 | 国产又黄又骚 | 狼人综合av| 亚洲av永久无码精品放毛片 | 欧美日韩亚洲不卡 | 美女污污网站 | 91丨porny丨| 亚洲av无码乱码国产精品久久 | 亚洲最大毛片 | 国产成人亚洲综合a∨婷婷 台湾a级片 | 懂色中文一区二区在线播放 | 深夜激情网站 | 国产精久久久久 | 色啊色| 中国一区二区视频 | 欧美极度另类 | 无码人妻久久一区二区三区 | 欧美日韩在线观看一区二区 | 欧美日韩免费网站 | 五月亚洲综合 | 伊人网伊人网 | 韩国三级视频 | www.com黄色 | 国产一级色 | 国产精品夜色一区二区三区 | 久久久国产精 | 污污视频免费看 | 日韩精品中字 | 青青草久久爱 | 国产精品人人人人 | 国产成人视屏 | 免费吃奶摸下激烈视频 | 夫妻淫语绿帽对白 | 精品在线视频一区二区 | 一级片视频免费 | 国产精品国产精品 | 99re伊人 | 69影院少妇在线观看 | 日韩精品在线视频观看 | 美女网站在线 | 中文字幕在线不卡视频 | 亚洲精品一级片 | 亚洲GV成人无码久久精品 | 亚洲日本国产 | 日本一区不卡在线观看 | 美女黄色一级片 | 网站在线看|