JNI - 向C ++发送一个大字节[]缓冲区

时间:2014-04-16 20:33:39

标签: java android c++ java-native-interface jnienv

我正在尝试使用JNI将大型java缓冲区byte [](例如460800)发送到C ++函数。以下是示例代码:

JNIExport void JNICALL XXXXXX_onRecvData(JNIEnv *env, jclass class, jbyteArray data) {
  jbyte *pData = NULL;
  pData = env->GetByteArrayElements(data, NULL);
  // call some function here
  Method((UINT8 *) pData, (UINT16)(env->GetArrayLength(data));
  env->ReleaseByteArrayElements(data, pData, 0);
}

其中

Method(uint8_t* buf, uint32_t buf_size) {
  // print buf_size
}

当我打印buf_size时,我得到一些小值,例如2048。这意味着我没有收到JNI函数中的完整缓冲区。我可以使用JNI发送的缓冲区大小有限制吗?知道为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

您将数组长度转换为UINT16。任何大于65,535字节的大小都会给您带来麻烦。

460800%65536,毫不奇怪,2048。