java jni 数组,JNI中基本类型数组的传递方法(无需拷贝数据!!!)

#include "tests_TestJNIArray.h"

#include 

#include 

#include 

#include 

class Timer{

private:

clock_t time;

public:

Timer(){

time=clock();

}

clock_t getElapsedTime(){

return clock()-time;

}

clock_t getElapsedTimeAndRestart(){

clock_t tmp=time;

time=clock();

return time-tmp;

}

void restart(){

time=clock();

}

int getCLOCKS_PER_SEC(){

return CLOCKS_PER_SEC;

}

};

JNIEXPORT void JNICALL Java_tests_TestJNIArray_addOne___3I( JNIEnv * env, jclass, jintArray intArray) {

jboolean b;

Timer timer;

jint* pint=env->GetIntArrayElements(intArray,&b);//获取指针!!第二个参数可为NULL

std::string str=b?"true":"false";

long t=timer.getElapsedTimeAndRestart();

std::cout<

jsize size=env->GetArrayLength(intArray);

for (int i=0; i

pint[i] =1;

env->ReleaseIntArrayElements(intArray,pint,0);//释放~~~

//  对于最后一个参数(如果指针指向的数组为副本时,否则该参数不起作用)

//      0       copy back the content and free the elems buffer

//      JNI_COMMIT      copy back the content but do not free the elems buffer

//      JNI_ABORT       free the buffer without copying back the possible changes

std::cout<

}

JNIEXPORT void JNICALL Java_tests_TestJNIArray_addOne___3D( JNIEnv * env, jclass, jdoubleArray intArray)

{

jboolean b;

Timer timer;

double* pd=(double*)env->GetPrimitiveArrayCritical(intArray,&b);

//if(pd==NULL)return;理论上应该检查!!!!

long t=timer.getElapsedTimeAndRestart();

jsize size=env->GetArrayLength(intArray);

std::string str=b?"true":"false";

std::cout<

for(int j=0;j<5;j ){ //验证一下,Java中的数据也在更新!!!

Sleep(1000);

for (int i=0; i

pd[i] =1;

Sleep(10);

}

}

env->ReleasePrimitiveArrayCritical(intArray,pd,0);//别忘了释放~~~虽然不知道不释放有什么问题。。。

std::cout<

}

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 jint[size];

std::string str=*pb?"true":"false";

std::cout<

for (int i=0; i

pint[i]=initValue;

}

env->ReleaseIntArrayElements(intArray,pint,JNI_COMMIT);

delete []pint; //如果使用GetIntArrayElements()得到该指针则不可以!!!否则Java直接崩溃了

return intArray;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值