簡體   English   中英

JNI:將多維Java數組傳輸到C程序

[英]JNI: transfer a multiple-dimension java array to c program

在Java中,定義了非基本對象的多維數組,例如Integer[][] arr 一個人應該如何通過JNI在C程序中訪問數組arr

public class Foo {
    public static Integer[][] arr = {{0}, {1, 2}, {3, 4, 5}};
}

首先,獲取字段ID:

jclass clazz = (*env)->FindClass(env, "fully/qualified/package/Foo");
jfieldID field = (*env)->GetFieldID(env, clazz, "arr", "[[Ljava/lang/Integer;" );

然后,您將需要使用它來獲取實際字段。 假設你有一個jobject類型的Foo稱為fooObj

jobject arrObj = (*env)->GetObjectField(env, fooObj, field);

可以將arr jObjectArray轉換為jObjectArray ,並且可以使用jni數組函數來操縱數組。 文檔可以在這里找到。

由於您具有2D整數對象數組,因此必須通過通常的方法從Integer類獲取基本類型。

目前,不可能將某些非基本對象的多維數組直接從Java程序傳輸到C程序。

解決此問題的方法是制作非原始多維數組的原始版本,並將原始多維數組從Java傳輸到C。無論如何,這樣的多維數組會作為jobjectArray本地傳輸。

二維整數數組的工作概述如下:

  1. 在Java中制作非原始多維數組的原始版本;
  2. 在本地C程序中將數組作為jobjectArray獲得;
  3. 使用GetObjectArrayElement遍歷每 ;
  4. 使用GetIntArrayElements函數迭代每個單元格 ,例如jint *val = (*env)->GetIntArrayElements(env, row, NULL);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM