我有以下JNI方法,
JNIEXPORT jobject JNICALL Java_projlib_DeserializeBuffer
(JNIEnv *env, jobject obj, jbyteArray inBufferData)
我创建了一个unsigned char*
列表,并使用从我的C ++代码中的inBufferData
中提取的一些数据填充它
list<unsigned char*> returnBuffer
我想将returnBuffer
返回到我的Java代码,它将是一个字节数组列表List<byte[]>
。
请告诉我如何通过jobject
通过JNI传递unsigned char *列表,然后用Java进行进一步处理。
答案 0 :(得分:1)
您将无法直接执行此操作。您必须在C ++中实例化所需Java列表实现的实例(因为jobject
是一个接口),将其放在jbytearray
中,然后从列表中添加jclass arrayListClass = env->FindClass("java/util/ArrayList"); // Find ArrayList class
jmethodID constructor = env->GetMethodID(arrayListClass, "<init>", "()V"); // Find ArrayList constructor
jobject arrayList = env->NewObject(arrayListClass, constructor); // Create new ArrayList instance
jmethodID add = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z"); // Find the ArrayList::add method
jbyteArray item =env->NewByteArray(10); // Instantiate a new byte[]
env->CallBooleanMethod(arrayList, add, item); // Add the byte[] to the ArrayList
项然后返回列表。
示例强>
由于我没有可用的JNI环境,因此这段代码只是插图(当你开始工作时可以自由编辑它),但你需要的是:
file.php