java — JNI — отправляет большой байтовый буфер в переполнение стека

Я пытаюсь отправить большой байт Java-буфера [] (например, 460800) в функцию C ++, используя JNI. Ниже приведен пример кода:

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

Решение

Вы приводите длину вашего массива к UINT16, Любой размер больше, чем 65 535 байт, вызовет у вас проблемы.

Неудивительно, что 460800% 65536 — это 2048.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]