я создаю два массива в C++, которые будут считываться в стороне Java:делает NewDirectByteBuffer создать копию в машинный код
env->NewDirectByteBuffer
env->NewByteArray
делает эти функции копирования в буфер я отправить его? Нужно ли создавать буфер в куче на стороне C++ или нормально его создавать в стеке, потому что jvm его скопирует?
, например, будет этот код работать нормально:
std::string stam = "12345";
const char *buff = stam.c_str();
jobject directBuff = env->NewDirectByteBuffer((void*)buff, (jlong) stam.length());
Другой пример:
std::string md5 "12345";
jbyteArray md5ByteArray = env->NewByteArray((jsize) (md5.length()));
env->SetByteArrayRegion(md5ByteArray, 0, (jsize) (md5.length()), (jbyte*)
md5.c_str());
строка создается на стеке. Будет ли этот код всегда работает или мне нужно, чтобы создать эти строки в куче и нести ответственность, чтобы удалить его после того, как Java заканчивает использовать его
Спасибо за хороший ответ. java side can not создает bytearray и отправляет его на сторону C++ для заполнения, потому что он не знает размер массива. Вот почему мне нужна сторона C++ для создания буфера – Shay