以下是一个示例代码,它演示了如何从JNI层获取一个int类型的数据,并使用Android中的IntBuffer类读取它。

JNI层代码:

JNIEXPORT jintArray JNICALL Java_com_example_jni_MainActivity_getIntArray(JNIEnv *env, jobject obj) { jintArray result; int arr[] = {1, 2, 3, 4, 5}; result = (*env)->NewIntArray(env, 5); if (result == NULL) { return NULL; // out of memory error thrown } (*env)->SetIntArrayRegion(env, result, 0, 5, arr); return result; }

Java层代码:

public class MainActivity extends AppCompatActivity { static { System.loadLibrary("native-lib"); }

private IntBuffer intBuffer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    int[] intArray = getIntArray();
    ByteBuffer byteBuffer = ByteBuffer.allocate(intArray.length * 4);
    byteBuffer.order(ByteOrder.nativeOrder());
    intBuffer = byteBuffer.asIntBuffer();
    intBuffer.put(intArray);
}

private native int[] getIntArray();

}

在这个示例中,JNI层代码中的getIntArray函数返回一个固定的int数组,Android应用程序在Java层调用getIntArray来获取这个数组。在Java层,我们首先获取这个int数组,然后创建一个ByteBuffer和一个IntBuffer对象来读取它。我们使用nativeOrder来确保我们读取的数据与本地平台的字节顺序相同。最后,我们将int数组复制到IntBuffer中。

请注意,这只是一个示例代码,实际上,您需要在JNI层获取底层数据,并将其复制到Java层。但是,这个示例可以帮助您了解如何使用IntBuffer来读取int数据


原文地址: http://www.cveoy.top/t/topic/e90M 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录