java - 将 NewDirectByteBuffer 从 C++ 传递到 Java (JNI)

标签 java c++ java-native-interface

我有这个 C++ 代码:

char *buffer = new char[100];

/*
*  ...populate this char array with some data...
*/

jobject jbuffer = env->NewDirectByteBuffer(buffer, 100);

然后,我想将我用 C++ 创建的这个 DirectByteBuffer 传递给 Java。

我有两个问题:

  1. env->NewDirectByteBuffer(buffer, 100) 会清除我在字符数组缓冲区中的数据吗?这是正确的做法吗?
  2. 这个缓冲区什么时候被删除?我应该稍后在 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/

相关文章:

java - 比较 Java 中的 Long 面临的一些问题

java - 无法将 Tomcat 设置为项目的服务器

c++ - 使用 Visual Studio 为 x64 编译?

c++ - 在 C++ 中从 Linux 应用程序发送电子邮件

c++ - 如何重现浮点 cos(x)!=cos(x)

java - 在 JNI 和 C 中释放持久数组

java - 从 POJO 创建 JSONObject

java.lang.UnsatisfiedLinkError - 加载多个 lib 文件?

android - Android图像原像处理中的C Jni错误

java - Spring LDAP 1.3.0 澄清