0

我正在尝试使用 JNI 将大型 java 缓冲区字节 [](例如 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 发送的缓冲区大小是否有任何限制?知道为什么会发生吗?

4

1 回答 1

2

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

毫不奇怪,460800 % 65536 是 2048。

于 2014-04-16T20:37:02.750 回答