java數組的使用,c++ java setobjectarrayelement_java中jni的使用:C/C++操作java中的數組

 2023-10-15 阅读 25 评论 0

摘要:在Java中數組分為兩種:1.基本類型數組java數組的使用、2.對象類型(Object[])的數組(數組中存放的是指向Java對象中的引用)一個能通用于兩種不同類型數組的函數:GetArrayLength(jarray array);學完Java再學C語言?首先來看一下怎么處理基本類型的數組:(1) GetArrayElements(Arr

在Java中數組分為兩種:

1.基本類型數組

java數組的使用、2.對象類型(Object[])的數組(數組中存放的是指向Java對象中的引用)

一個能通用于兩種不同類型數組的函數:

GetArrayLength(jarray array);

學完Java再學C語言?首先來看一下怎么處理基本類型的數組:

(1) GetArrayElements(Array arr , jboolean* isCopide);

這類函數可以把Java基本類型的數組轉換到C/C++中的數組,有兩種處理方式,一種是拷貝一份傳回本地代碼,另一個是把指向Java數組的指針直接傳回到本地代碼中,處理完本地化的數組后,通過ReleaseArrayElements來釋放數組

java數組初始化賦值、(2) ReleaseArrayElements(Array arr , * array , jint mode)

用這個函數可以選擇將如何處理Java跟C++的數組,是提交,還是撤銷等,內存釋放還是不釋放等

mode可以取下面的值:

國外java與C。0 :對Java的數組進行更新并釋放C/C++的數組

JNI_COMMIT :對Java的數組進行更新但是不釋放C/C++的數組

JNI_ABORT:對Java的數組不進行更新,釋放C/C++的數組

java object數組,(3) GetPrimittiveArrayCritical(jarray arr , jboolean* isCopied);

(4) ReleasePrimitiveArrayCritical(jarray arr , void* array , jint mode);

也是JDK1.2出來的,為了增加直接傳回指向Java數組的指針而加入的函數,同樣的也會有同GetStringCritical的死鎖的問題

(5) GetArrayRegion(Array arr , jsize start , jsize len , * buffer);

在C/C++預先開辟一段內存,然后把Java基本類型的數組拷貝到這段內存中,這個方法和之前拷貝字符串的GetStringRegion方法的原理是類似的

(6) SetArrayRegion(Array arr , jsize start , jsize len , const * buffer);

把Java基本類型的數組中的指定范圍的元素用C/C++的數組中的元素來賦值

(7) Array NewArray(jsize sz)

指定一個長度然后返回相應的Java基本類型的數組

在來看一下怎么處理對象型數組

JNI沒有提供直接把Java的對象類型數組(Object[])直接轉到C++中的Object[]數組的函數,而是直接通過Get/SetObjectArrayElement這樣的函數來對Java的Object[]數組進行操作由于去的對象數組沒有進行拷貝,所以不需要釋放任何資源

NewObjectArray可以通過指定長度跟初始值來創建某個類的數組

下面來看一下例子:操作兩種類型的數組

Java中的代碼:

12713cad1677138c65cc7c5cec61bf1b.gif

7.jpg (26.45 KB, 下載次數: 13)

2016-11-24 17:48 上傳

C++中的代碼:

12713cad1677138c65cc7c5cec61bf1b.gif

9.jpg (47.25 KB, 下載次數: 13)

2016-11-24 17:51 上傳

12713cad1677138c65cc7c5cec61bf1b.gif

10.jpg (54.16 KB, 下載次數: 12)

2016-11-24 17:51 上傳

12713cad1677138c65cc7c5cec61bf1b.gif

15.jpg (77.75 KB, 下載次數: 10)

2016-11-24 17:51 上傳

在Eclipse編譯運行結果如下:

12713cad1677138c65cc7c5cec61bf1b.gif

16.jpg (20.51 KB, 下載次數: 9)

2016-11-24 17:52 上傳

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/136803.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息