我正在尝试使用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发送的缓冲区大小有限制吗?知道为什么会这样吗?
答案 0 :(得分:2)
您将数组长度转换为UINT16
。任何大于65,535字节的大小都会给您带来麻烦。
460800%65536,毫不奇怪,2048。