我有这个 C++ 代码:
char *buffer = new char[100];
/*
* ...populate this char array with some data...
*/
jobject jbuffer = env->NewDirectByteBuffer(buffer, 100);
然后,我想将我用 C++ 创建的这个 DirectByteBuffer 传递给 Java。
我有两个问题:
env->NewDirectByteBuffer(buffer, 100)
会清除我在字符数组缓冲区中的数据吗?这是正确的做法吗?- 这个缓冲区什么时候被删除?我应该稍后在 C++ 中删除它还是由 Java 的 GC 为我处理它?</li>
最佳答案
jobject jbuffer = env->NewDirectByteBuffer(buffer, 100);
创建对 Java 对象的本地引用。当明确发布时,或者如果您使用 PushLocalFrame()/PopLocalFrame(),它将被标记为未使用。 ,或者当分配此本地引用的 JNI 函数返回时。
之后,GC 将按照与常规 Java 对象相同的规则决定删除缓冲区。
关于java - 将 NewDirectByteBuffer 从 C++ 传递到 Java (JNI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45514501/