版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JNI 中基本類型數(shù)組的傳遞方法(無(wú)需拷貝數(shù)據(jù)!)0、先來(lái)看一下主要用到哪些函數(shù):C 代碼 GetIntArrayElements();/ 貌似得到的是副本,要拷 貝數(shù)據(jù) ReleaseIntArrayElements();/ 對(duì)應(yīng)上面的函數(shù)的釋 放資源的函數(shù) env->GetPrimitiveArrayCritical();/ 貌似 得到的是指向原數(shù)據(jù)的指針 env->ReleasePrimitiveArrayCritical();/ 對(duì)應(yīng)上面的函數(shù) 的釋放資源的函數(shù)官方文檔: spec/functions.html#wp17440JNI 函數(shù)的中譯本 (貌似沒看到 GetPri
2、mitiveArrayCritical (): 下面正式開始: 1、不知道如 何設(shè)置 JNI 環(huán)境的先看這里: 、 Java 端程序:Java 端:import java.util.Arrays;Java 代碼 package tests; public class TestJNIArraystaticSystem.loadLibrary(TestJNIArray); public static native voidaddOne(int ints);/ 數(shù)組元素 1 public static native void addOne(double ints);/ 數(shù)組元素 1 ,為了測(cè)試, C
3、 中 循環(huán)了 5 次 public static native int getNewArray(int size,int initValue);/ 生成初始值為 initValue 的數(shù)組,數(shù)組長(zhǎng) 度為 sizepublic static void main(String args)throws InterruptedException int n=20; final int a=new intn;for (int i = 0; i< a.length; i ) ai=i; if(n<50)System.out.println(Arrays.toString(a); addOne(
4、a);if(n<50)System.out.println(Arrays.toString(a);final double d=new doublen;for (int i = 0; i <d.length; i ) di=i; /addOne(d);if(n<50)System.out.println(Arrays.toString(d); new Thread(new Runnable() Overridepublic void run() addOne(d); ).start();for (int i = 0; i <200; i ) Thread.sleep(2
5、0);System.out.println(Arrays.toString(d); if(dd.length-1-d0!=n-1)System.out.println( 檢測(cè)到 C 端 更新數(shù)據(jù)中 );/ 看看能否找到在 C 更新數(shù)組時(shí) Java 端又讀 取數(shù)據(jù)的情況 int b=getNewArray(2, 9);System.out.println(Arrays.toString(b);int c=getNewArray(0, 9);System.out.println(Arrays.toString(c); 3、 C 端程序:C 代碼 #include tests_TestJNIArra
6、y.h#include<windows.h>#include <time.h>#include<iostream> #include <string>classTimer private:clock_t time; public:Timer() time=clock(); clock_t getElapsedTime()return clock()-time;clock_t getElapsedTimeAndRestart() tmp=time; time=clock();returnclock_t int return JNIEXPORT vo
7、idtime-tmp; void restart() time=clock(); getCLOCKS_PER_SEC() CLOCKS_PER_SEC; ;JNICALL Java_tests_TestJNIArray_addOne_3I( JNIEnv* env, jclass, jintArray intArray) jboolean b;Timer timer; jint* pint=env->GetIntArrayElements(intArray,&b);/ 獲取 指針!第二個(gè)參數(shù)可為 NULL std:string str=b?true:false; long t=t
8、imer.getElapsedTimeAndRestart(); std:cout<<GetIntArrayElements() 耗時(shí) : <<t<<t 為副本? <<str<<std:endl;/ 很悲 劇,自己得到的是副本 (copy 了一份, 速度慢啊) jsizesize=env->GetArrayLength(intArray);for (int i=0;i<size; i ) pinti =1;env->ReleaseIntArrayElements(intArray,pint,0);/ 釋放 / 對(duì)于最
9、后一個(gè)參數(shù) (如果指針指向的數(shù)組為副 本時(shí),否則該參數(shù)不起作用 ) / 0 copy back the content and free the elems buffer /JNI_COMMITcopy back the content but do not freethe elems buffer/JNI_ABORTfreethe buffer without copying back the possible changes std:cout<< 從 c 程序返回 <<std:endl; JNIEXPORT void JNICALL Java_tests_TestJ
10、NIArray_addOne_3D( JNIEnv * env, jclass, jdoubleArray intArray) jboolean b; Timer timer; double* pd=(double*)env->GetPrimitiveArrayCritical(intArray,&a mp;b); /if(pd=NULL)return; 理論上應(yīng)該檢查! ! long t=timer.getElapsedTimeAndRestart(); jsize size=env->GetArrayLength(intArray);std:stringstr=b?true:f
11、alse; std:cout<<GetPrimitiveArrayCritical() 耗時(shí) : <<t<<t 為副本? <<str<<std:endl;/ 這次 是原始數(shù)據(jù)了, happy 啊!for(int j=0;j<5;j ) /驗(yàn)證一下, Java 中的數(shù)據(jù)也在更新! ! Sleep(1000);for (int i=0; i<size; i )pdi=1; Sleep(10); env->ReleasePrimitiveArrayCritical(intArray,pd,0);/ 別忘 了釋放 雖然不知道
12、不釋放有什么問(wèn)題。 。 std:cout<< 從 c 程序返回 <<std:endl; JNIEXPORT jintArray JNICALL Java_tests_TestJNIArray_getNewArray( JNIEnv * env,jclass, jint size, jint initValue ) jintArray intArray=env->NewIntArray(size); jboolean* pb;/jint* pint=env->GetIntArrayElements(intArray,pb);jint* pint=new jintsize;std:stringstr=*pb?true:false; std:cout<< 自己生成的 Java 數(shù)組,取出指針,為副本? <<str<<std:
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年復(fù)合管道項(xiàng)目融資計(jì)劃書
- 《春都戰(zhàn)略決策分析》課件
- 養(yǎng)老院老人緊急救援預(yù)案制度
- 2024年新能源產(chǎn)業(yè)融資借款法律風(fēng)險(xiǎn)控制服務(wù)合同3篇
- 房屋設(shè)計(jì)加裝修合同(2篇)
- 2024年度鐵藝健身器材安裝與維護(hù)合同3篇
- 2025年咸陽(yáng)貨運(yùn)從業(yè)資格證試題庫(kù)及答案
- 2025年吉林年貨運(yùn)從業(yè)資格證考試試題
- 中考語(yǔ)文總復(fù)習(xí):《成語(yǔ)運(yùn)用》課件
- 2024年度房屋評(píng)估合同:個(gè)人二手房購(gòu)房評(píng)估服務(wù)協(xié)議3篇
- 從分?jǐn)?shù)到分式教學(xué)設(shè)計(jì)-
- 酒店長(zhǎng)期租房合同模板(16篇)
- 場(chǎng)域與對(duì)話-公共空間里的雕塑 課件-2023-2024學(xué)年高中美術(shù)人美版(2019)美術(shù)鑒賞
- 關(guān)于違規(guī)收受禮品禮金警示教育心得體會(huì)范文
- 國(guó)家開放大學(xué)《國(guó)際商法》形考任務(wù)1-5參考答案
- 顱腦損傷課件
- 滬教版英語(yǔ)八年級(jí)上冊(cè)知識(shí)點(diǎn)歸納匯總
- 裝飾裝修工程售后服務(wù)具體措施
- 糖皮質(zhì)激素類藥物臨床應(yīng)用指導(dǎo)原則(2023年)
- 世界的海陸分布、世界的地形復(fù)習(xí)提綱
- 門診掛號(hào)系統(tǒng)實(shí)驗(yàn)報(bào)告
評(píng)論
0/150
提交評(píng)論