Java의 3d float 배열을 1 차원 배열로 전개 할 수 있습니다. 그런 다음 1 차원 배열에 올바른 색인을 생성하여 원래의 3 차원 배열의 각 요소에 액세스 할 수 있습니다.
// The lengths of each dimension of the values array
int l, m, n;
// Instead of:
// float[][][] values = new float[l][m][n];
// Do this:
float[] values = new float[l * m * n];
// To access an entry at (x, y, z) in the array.
// Instead of:
// float v = values[z][y][x];
// Do this:
int i = (m * n * z) + (n * y) + x;
float v = values[i];
C++ :
또한 기본 방법은 또한 1D 배열
자바에 올바른 인덱스를 생성 할 수 있도록 기본 방법으로 배열의 각 차원의 길이를 통과해야합니다
// You should not store a reference to the Java array as a global variable.
// The reference is only valid between the Get/ReleaseFloatArrayElements calls
// Since valuesf is assigned the same reference to the Java array,
// the same advice also applies to it
// jfloat* valuesjf = NULL;
// float* valuesf = NULL;
void
Java_Grids_Grid5_Update(JNIEnv* env,
jobject thiz,
jfloatArray values,
jint l, jint, m, jint n) {
jfloat* valuesjf = (*env)->GetFloatArrayElements(env,values,NULL);
float* valuesf = valuesjf;
int x, y, z;
int i = (m * n * z) + (n * y) + x;
valuesf[0]=121+valuesf[i]; //do some calculations
(*env)->ReleaseFloatArrayElements(env, values, valuesjf, JNI_ABORT);
}
나는 당신이 래퍼 클래스를 통해 그것을해야한다고 생각한다. "JNI passing objects"를 검색하면 많은 자원을 얻을 것이다. – vitakot