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

时间:2017-08-04 19:50:46

标签: 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)清除char数组缓冲区中的数据?这是一种正确的方法吗?
  2. 什么时候要删除这个缓冲区?我应该在之后的某个时间用C ++删除它还是Java的GC会为我处理它?<​​/ li>

1 个答案:

答案 0 :(得分:0)

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

为Java对象创建本地引用。在明确释放时,或者如果您使用PushLocalFrame()/PopLocalFrame(),或者在分配此本地引用的JNI函数返回时,它将被标记为未使用。

之后,GC将决定按照与常规Java对象相同的规则删除缓冲区。