




版權(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 ?。or(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 國(guó)際油氣貿(mào)易合同文檔
- 環(huán)保產(chǎn)業(yè)投資協(xié)議書
- 出借咨詢與服務(wù)協(xié)議
- 在線醫(yī)療咨詢平臺(tái)推廣合作協(xié)議
- 汽車租賃行業(yè)車輛保險(xiǎn)責(zé)任免責(zé)協(xié)議書
- 2025年激光隧道斷面測(cè)量系統(tǒng)項(xiàng)目合作計(jì)劃書
- 電競(jìng)酒店宵禁管理協(xié)議
- 第11講 美國(guó) 巴西 第2課時(shí) 教學(xué)設(shè)計(jì) 2023-2024學(xué)年高二下學(xué)期
- 常泰過(guò)江通道主橋施工方案
- 第2課 學(xué)會(huì)寬容 第一課時(shí) 教學(xué)設(shè)計(jì)-2023-2024學(xué)年道德與法治六年級(jí)下冊(cè)統(tǒng)編版
- 公務(wù)員2019年國(guó)考《申論》真題及答案(地市級(jí))
- 小學(xué)三年級(jí)下冊(cè)體育教案
- 北師大版二年級(jí)上冊(cè)100以內(nèi)加減法豎式計(jì)算題300道及答案
- 全過(guò)程跟蹤審計(jì)及預(yù)算績(jī)效管理投標(biāo)方案(技術(shù)方案)
- 【《蘇泊爾公司存貨管理的優(yōu)化建議分析》13000字論文】
- 2024年車載SoC發(fā)展趨勢(shì)及TOP10分析報(bào)告-2024-09-零部件
- 伽馬數(shù)據(jù):2024年中國(guó)游戲產(chǎn)業(yè)趨勢(shì)及潛力分析報(bào)告
- 事業(yè)單位考試題庫(kù):公文寫作能力測(cè)試試題及答案
- 2024-2030年中國(guó)數(shù)據(jù)治理行業(yè)市場(chǎng)發(fā)展分析及發(fā)展趨勢(shì)與投資前景研究報(bào)告
- 北師大版八年級(jí)生物下冊(cè)全冊(cè)課件(2024年春季版)
- 高一英語(yǔ)完形填空專項(xiàng)訓(xùn)練100(附答案)及解析
評(píng)論
0/150
提交評(píng)論