jni 与java 之间传递bytearray
来源:互联网 发布:手机排队软件 编辑:程序博客网 时间:2024/05/22 02:27
要实现在java 端传递bytearray 到jni 端,同时在jni 端要反馈回bytearray
在java 端的声明如下:
public native byte[] Bluetooth_NativeProcessData_Send(byte[] data,int len);
public native byte[] Bluetooth_NativeProcessData_Receive(byte[] data,int len);
如下是jni 端的声明
static JNINativeMethod gMethods[] = {
{"Bluetooth_NativeProcessData_Send","([BI)[B",(void*)Native_ProcessData_Send},
{"Bluetooth_NativeProcessData_Receive","([BI)[B",(void*)Native_ProcessData_Receive},
};
在jni 端的实现:
jbyte gs_raw_data[256];
jbyte gr_raw_data[256];
JNIEXPORT jbyteArray JNICALL Native_ProcessData_Send(JNIEnv *env, jobject clazz, jbyteArray data,jint len)
{
jclass cls;
int i;
cls = env->FindClass(JNIREG_CLASS);
jbyte* bytedata =env->GetByteArrayElements(data, 0);
memset(&gs_raw_data,0,255);
memcpy(&gs_raw_data,bytedata,len);
// parse the data
//below is the return 's bytearray lens
jbyteArray jarrRV =env->NewByteArray(len+1);
env->SetByteArrayRegion(jarrRV, 0,len,gs_raw_data);
return jarrRV;
}
JNIEXPORT jbyteArray JNICALL Native_ProcessData_Receive(JNIEnv *env, jobject clazz, jbyteArray data,jint len)
{
jclass cls;
int i;
cls = env->FindClass(JNIREG_CLASS);
jbyte* bytedata =env->GetByteArrayElements(data, 0);
memset(&gr_raw_data,0,255);
memcpy(&gr_raw_data,bytedata,len);
// parse the data and process your data
//try to process the data
for(i=0;i<len;i++)
{
gr_raw_data[i]=bytedata[i]+1;
}
//after proces the data, you can return the processed data lens which may be different the raw len
// note below is the return 's bytearray lens
jbyteArray jarrRV =env->NewByteArray(len+1);
env->SetByteArrayRegion(jarrRV, 0,len,gs_raw_data);
return jarrRV;
}
//blow is the java to call jni and pass the byte array to jni and return from jni
public void test(t) {
// Create temporary object
int ilength,i;
byte[] retdata;
byte[] out1 = new byte[1024];
{
out1[0] =(byte) 0X31;
out1[1] =(byte) 0X32;
out1[2] =0x33;
out1[3] =0x34;
out1[4] = 0x35;
}
retdata=Bluetooth_NativeProcessData_Send(out1,5);
{
Log.d(TAG,"THE rawdata IS---"+bytesToHex(out1,5));
Log.d(TAG,"THE RETDATA IS---"+bytesToHex(retdata,5));
}
- jni 与java 之间传递bytearray
- JNI byteArray 传递与返回
- 通过JNI 实现 java与C++之间的信息传递
- Android使用JNI实现Java与C之间传递数据
- Android使用JNI实现Java与C之间传递数据
- Android使用JNI实现Java与C之间传递数据
- Android使用JNI实现Java与C之间传递数据
- Android使用JNI实现Java与C之间传递数据
- Android使用JNI实现Java与C之间传递数据
- Android使用JNI实现Java与C之间传递数据
- Android使用JNI实现Java与C之间传递数据
- Android使用JNI实现Java与C之间传递数据
- Java与C之间通过JNI传递中文字符串
- Android使用JNI实现Java与C之间传递数据 .
- Android使用JNI实现Java与C之间传递数据
- Android使用JNI实现Java与C之间传递数据
- Java与C之间通过JNI传递中文字符串
- Android使用JNI实现Java与C之间传递数据
- VS2010引用App_Code下的类文件问题解决方法
- 【LeetCode从零单排】No96Unique Binary Search Trees
- C++中容易忽略的一些细节
- 小应用大智慧学习笔记
- Android自定义圆形图片 带边框效果
- jni 与java 之间传递bytearray
- SublimeText3: ImportError: No module named ‘urllib2′
- Android对Linux内核的改动你知道多少?
- C++ 类里面,函数占用存储空间问题
- 网页中嵌入外部页面的四种方法
- 新的开始
- 8中常见的排序算法
- C语言 编写一个程序从标准输入读取字符,并把他们写到标准输出。除了大写字母转换成小写字母之外,其他的原样输出。
- iOS 真机调试(史上最详细步骤解析,hmt精心打造)